From 87b9056460b26c1c26c470d5585304b5f944fd98 Mon Sep 17 00:00:00 2001 From: Jorge Rivera Date: Sun, 1 Nov 2026 08:28:19 +0100 Subject: [PATCH 1/2] feat(capture): send a Cloud Run ID token when recording against dev dfo-dev-apis refuses anonymous callers, so `record` against dev answered 403 on every request. `record --cloud-run-token` mints the gcloud account's Google ID token, sends it in `X-Serverless-Authorization` on each request to the base URL's origin, and mints a new one every 45 minutes. Signed storage URLs get no token, and no record holds it. --- python/client-contract/README.md | 2 +- tools/README.md | 4 +- tools/capture_client_contract.py | 72 ++++++++++++++++++++- tools/tests/test_capture_client_contract.py | 30 +++++++++ 4 files changed, 102 insertions(+), 6 deletions(-) diff --git a/python/client-contract/README.md b/python/client-contract/README.md index 6407aa4..273fc36 100644 --- a/python/client-contract/README.md +++ b/python/client-contract/README.md @@ -199,7 +199,7 @@ uv sync --directory ../dfo-apis --extra eval --extra api --extra engine --extra 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: +Its `record` command runs every scenario against a base URL, dev's Cloud Run URL by default, which refuses anonymous callers, so a record against dev passes `--cloud-run-token` to send the gcloud account's Google ID token in `X-Serverless-Authorization` to the base URL's origin and to no other host. It 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 diff --git a/tools/README.md b/tools/README.md index b2d73e8..fc4f766 100644 --- a/tools/README.md +++ b/tools/README.md @@ -44,10 +44,10 @@ uv run tools/validate_descriptions_vectors.py 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: +`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, with `--cloud-run-token` sending the gcloud account's ID token to that origin as dev requires, 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: ```bash -uv run tools/capture_client_contract.py record +uv run tools/capture_client_contract.py record --cloud-run-token ``` `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: diff --git a/tools/capture_client_contract.py b/tools/capture_client_contract.py index c069777..a45b12d 100644 --- a/tools/capture_client_contract.py +++ b/tools/capture_client_contract.py @@ -10,7 +10,7 @@ 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] + [--only NAME ...] [--offline] [--cloud-run-token] [--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 @@ -40,7 +40,10 @@ outside a `location` under the base URL, is refused. The long builds need two specs the server has not built, and the run picks each from the first start year whose spec the server has not built, so each record moves both -start years up. `--scenarios-dir` writes outside the package, unvalidated. +start years up. `--cloud-run-token` sends the gcloud account's Google ID +token in `X-Serverless-Authorization` to the base URL's origin, which dev +needs since it refuses anonymous callers, and mints a new one every 45 +minutes. `--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, when the binary bodies pass 5 MB, or when the records and bodies together pass @@ -356,6 +359,61 @@ def _lower(items: Any) -> dict[str, str]: return {name.lower(): value for name, value in items} +# Google ID tokens last an hour. The recorder mints a new one well before +# that, since one record outlasts a token. +ID_TOKEN_LIFETIME_S = 45 * 60 + + +def gcloud_id_token() -> str: + """A Google ID token for the gcloud account, which Cloud Run accepts from + a caller with the invoker role.""" + result = subprocess.run( + ["gcloud", "auth", "print-identity-token"], + capture_output=True, + text=True, + check=False, + ) + if result.returncode != 0 or not result.stdout.strip(): + raise SystemExit( + f"gcloud auth print-identity-token failed: {result.stderr.strip()}" + ) + return result.stdout.strip() + + +def cloud_run_transport( + base_url: str, + transport: Transport, + mint: Callable[[], str] = gcloud_id_token, + clock: Callable[[], float] = time.monotonic, +) -> Transport: + """`transport` with a Google ID token in `X-Serverless-Authorization` on + every request to the base URL's origin, as Cloud Run needs from a caller + when the service refuses anonymous ones. A request to another origin, + such as a signed storage URL, carries no token. The header goes on the + wire only, so no record holds it.""" + origin = _origin(base_url) + held: dict[str, Any] = {} + + def token() -> str: + if "token" not in held or clock() - held["at"] >= ID_TOKEN_LIFETIME_S: + held.update(token=mint(), at=clock()) + return held["token"] + + def send( + method: str, + url: str, + *, + body: bytes | None, + headers: Mapping[str, str], + timeout: float, + ) -> Response: + if _origin(url) == origin: + headers = {**headers, "x-serverless-authorization": f"Bearer {token()}"} + return transport(method, url, body=body, headers=headers, timeout=timeout) + + return send + + # 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. @@ -4856,9 +4914,12 @@ def run_record(args: argparse.Namespace) -> int: if unknown: raise SystemExit(f"no scenario is named {sorted(unknown)}") chosen = set(args.only or names) + transport: Transport = _offline if args.offline else urllib_transport + if args.cloud_run_token and not args.offline: + transport = cloud_run_transport(args.base_url, transport) ctx = Context( args.base_url, - _offline if args.offline else urllib_transport, + transport, load_actions(package_dir), load_client_codes(package_dir), load_client_rules(package_dir), @@ -4937,6 +4998,11 @@ def main(argv: Sequence[str] | None = None) -> int: action="store_true", help="derive each outcome again from the records, with no request", ) + record.add_argument( + "--cloud-run-token", + action="store_true", + help="send the gcloud account's ID token to the base URL's origin", + ) record.add_argument( "--scenarios-dir", type=Path, diff --git a/tools/tests/test_capture_client_contract.py b/tools/tests/test_capture_client_contract.py index ba71bdf..9506c6e 100644 --- a/tools/tests/test_capture_client_contract.py +++ b/tools/tests/test_capture_client_contract.py @@ -591,6 +591,36 @@ def transport(method: str, url: str, **kwargs: Any) -> Any: ) +def test_the_cloud_run_transport_sends_a_fresh_token_to_the_api_origin_alone() -> None: + """The token reaches the API's origin and no signed storage URL, and the + transport mints a new one once the held one has aged past its lifetime.""" + sent: list[tuple[str, str | None]] = [] + + def transport(method: str, url: str, **kwargs: Any) -> Any: + sent.append((url, kwargs["headers"].get("x-serverless-authorization"))) + return capture.Response(200, {}, b"") + + minted = iter(["t1", "t2"]) + now = [0.0] + send = capture.cloud_run_transport( + "https://api.example/api", transport, lambda: next(minted), lambda: now[0] + ) + for url in ( + "https://api.example/api/search", + "https://storage.googleapis.com/bucket/file?X-Goog-Signature=s", + "https://api.example/api/datasets/files/x", + ): + send("GET", url, body=None, headers={}, timeout=1.0) + now[0] = capture.ID_TOKEN_LIFETIME_S + send("GET", "https://api.example/api/search", body=None, headers={}, timeout=1.0) + assert [token for _, token in sent] == [ + "Bearer t1", + None, + "Bearer t1", + "Bearer t2", + ] + + def _long_build_ctx( monkeypatch: pytest.MonkeyPatch, answers: Mapping[tuple[str, int], tuple[str, int | None]], From e497889fe5fae68a75825e437664beffd5827b4d Mon Sep 17 00:00:00 2001 From: Jorge Rivera Date: Sun, 1 Nov 2026 08:46:14 +0100 Subject: [PATCH 2/2] feat(client-contract): recapture the served document and re-record at apis ccb661792 served/openapi.json comes from dfo-apis ccb661792, and every recorded scenario from its dev deploy. The document gains the analysis, derived, export, frame and share routes (14 paths, 71 schemas) and EnrichmentOptionModel.in_long_layout, true when a long-layout download writes the enrichment with no columns token. Search now binds the ODA disbursement questions to net flows, so ref-one-member follows fetch-spec-party-totals-kept to its Net spec, version and file. The long builds moved to 1968 and 1969. --- python/client-contract/CHANGELOG.md | 4 +- .../refs/ref-one-member.json | 12 +- .../answer-candidate-specs-not-a-list.json | 85 +- .../answer-candidates-choose-fetch.json | 180 +- .../scenarios/answer-catalogue.json | 23 +- .../scenarios/answer-declined.json | 23 +- .../scenarios/answer-definite-fetch.json | 696 +- .../answer-definition-spec-id-mismatch.json | 638 +- .../scenarios/answer-empty-parts.json | 19 +- .../answer-folded-parts-unnamed.json | 4640 +++- .../scenarios/answer-mixed-fetch-partial.json | 105 +- .../scenarios/answer-mixed-fetch-raises.json | 72 +- .../answer-nested-specs-unchecked.json | 536 +- .../answer-operations-not-a-list.json | 692 +- .../answer-part-status-not-a-string.json | 68 +- .../answer-several-readings-folded.json | 4642 +++- .../answer-several-readings-folded.parquet | Bin 16208 -> 17220 bytes .../answer-spec-without-identity.json | 638 +- .../answer-spec-without-resolved.json | 56 +- .../answer-timed-out-keeps-reasons.json | 64 +- .../scenarios/answer-timed-out.json | 64 +- .../scenarios/answer-unknown-enum-value.json | 27 +- .../scenarios/answer-unknown-kind.json | 29 +- .../scenarios/answer-unknown-part-status.json | 68 +- .../scenarios/answer-unsupported-part.json | 68 +- .../choose-candidate-assumed-reading.json | 150 +- .../scenarios/choose-candidate-by-label.json | 152 +- .../choose-candidate-echoes-assumptions.json | 696 +- .../scenarios/choose-candidate-two-parts.json | 277 +- .../choose-echo-drops-malformed-items.json | 692 +- ...choose-echoes-separate-and-operations.json | 664 +- .../choose-option-beside-definite.json | 668 +- .../choose-option-two-part-query.json | 20 +- .../choose-option-without-data-query.json | 20 +- .../scenarios/choose-part-by-mention.json | 526 +- .../scenarios/choose-place-one-part.json | 528 +- .../scenarios/choose-place-two-parts.json | 543 +- .../choose-posts-unsupported-placeholder.json | 656 +- .../choose-refused-answered-part.json | 66 +- .../choose-refused-label-in-two-groups.json | 21 +- ...hoose-refused-mention-names-two-parts.json | 37 +- .../scenarios/choose-refused-no-choice.json | 636 +- .../scenarios/choose-refused-no-options.json | 27 +- .../choose-refused-option-out-of-range.json | 85 +- ...se-refused-part-without-variable-text.json | 79 +- ...choose-refused-shared-candidate-label.json | 94 +- .../choose-refused-shared-label.json | 16 +- .../scenarios/choose-refused-two-choices.json | 37 +- ...hoose-refused-unknown-candidate-label.json | 85 +- .../choose-refused-unknown-label.json | 27 +- .../choose-refused-unknown-part.json | 66 +- .../choose-refused-unknown-status.json | 79 +- .../fetch-frame-several-readings.json | 3868 ++- .../scenarios/fetch-null-member.json | 692 +- .../fetch-partial-nothing-answered.json | 29 +- .../fetch-ref-artifact-unlisted.json | 70 +- .../fetch-ref-expired-file-selector.json | 88 +- .../fetch-ref-expired-newer-version.json | 54 +- .../fetch-ref-expired-not-reproducible.json | 12 +- .../fetch-ref-expired-rebuild-other-spec.json | 56 +- ...etch-ref-expired-rebuild-same-version.json | 56 +- .../scenarios/fetch-ref-newest-version.json | 16 +- .../fetch-ref-signed-url-refused-twice.json | 90 +- .../fetch-ref-signed-url-refused.json | 90 +- .../scenarios/fetch-ref-unknown-version.json | 12 +- .../scenarios/fetch-ref.json | 92 +- .../scenarios/fetch-renamed-strict-field.json | 692 +- .../scenarios/fetch-retry-after-504.json | 692 +- .../scenarios/fetch-spec-503-then-504.json | 54 +- .../scenarios/fetch-spec-504-retry-after.json | 54 +- .../fetch-spec-accepted-running.json | 269 +- .../scenarios/fetch-spec-async-build.json | 269 +- .../scenarios/fetch-spec-digest-mismatch.json | 56 +- .../scenarios/fetch-spec-empty-narrowing.json | 54 +- .../scenarios/fetch-spec-entity-dropped.json | 129 +- .../scenarios/fetch-spec-entity-rebound.json | 118 +- .../fetch-spec-files-route-no-content.json | 56 +- .../fetch-spec-files-route-serves-file.json | 54 +- ...h-spec-files-route-temporary-redirect.json | 56 +- .../fetch-spec-foreign-artifact-url.json | 54 +- .../scenarios/fetch-spec-frame-layout.json | 56 +- .../scenarios/fetch-spec-group-narrowed.json | 523 +- .../fetch-spec-group-narrowed.parquet | Bin 8810 -> 8800 bytes .../fetch-spec-group-origin-rebound.json | 506 +- .../fetch-spec-group-origin-rebound.parquet | Bin 21121 -> 21244 bytes .../scenarios/fetch-spec-known-sentence.json | 58 +- .../fetch-spec-manifest-without-identity.json | 54 +- ...-spec-manifest-without-schema-version.json | 54 +- .../scenarios/fetch-spec-narrowed.json | 114 +- ...tch-spec-operation-failed-resubmitted.json | 293 +- .../fetch-spec-party-totals-kept.json | 230 +- .../fetch-spec-party-totals-kept.parquet | Bin 10932 -> 10911 bytes .../fetch-spec-party-totals-left-out.json | 306 +- .../fetch-spec-party-totals-left-out.parquet | Bin 10346 -> 10333 bytes .../scenarios/fetch-spec-poll-not-found.json | 33 +- .../fetch-spec-poll-pacing-changes.json | 221 +- ...-spec-poll-rate-limited-not-retryable.json | 33 +- .../fetch-spec-poll-rate-limited.json | 271 +- .../fetch-spec-poll-refused-backoff.json | 259 +- .../fetch-spec-poll-refused-retry-after.json | 271 +- .../scenarios/fetch-spec-poll-refused.json | 275 +- .../fetch-spec-relative-location.json | 54 +- .../scenarios/fetch-spec-request-invalid.json | 12 +- .../fetch-spec-resubmit-other-spec.json | 110 +- .../fetch-spec-same-origin-artifact-url.json | 54 +- .../fetch-spec-signed-fetch-partial.json | 56 +- .../fetch-spec-storage-artifact-url.json | 54 +- .../scenarios/fetch-spec-strict-warning.json | 50 +- .../scenarios/fetch-strict-info-notice.json | 692 +- .../scenarios/mint-async-build.json | 275 +- .../scenarios/mint-async-build.parquet | Bin 466531 -> 469908 bytes .../newest-version-unreadable-page.json | 14 +- .../operation-failed-without-error.json | 26 +- .../scenarios/operation-resume.json | 712 +- .../scenarios/operation-resume.parquet | Bin 486086 -> 489019 bytes .../resubmit-candidates-sibling.json | 214 +- ...ubmit-placeholder-without-restatement.json | 169 +- .../scenarios/search-body-not-an-object.json | 29 +- .../search-place-ambiguous-twice.json | 25 +- .../scenarios/search-place-ambiguous.json | 31 +- .../scenarios/search-proxy-rate-limited.json | 27 +- .../scenarios/search-retry-after-503.json | 27 +- .../scenarios/search-server-warning.json | 81 +- .../scenarios/search-sunset-warning.json | 54 +- .../search-two-parts-place-ambiguous.json | 41 +- .../scenarios/search-warning-top5.json | 706 +- .../scenarios/search-warning-top5.parquet | Bin 10329 -> 10345 bytes .../dfo_client_contract/served/SOURCE.json | 2 +- .../dfo_client_contract/served/openapi.json | 21686 ++++++++++------ tools/tests/test_capture_client_contract.py | 4 +- 130 files changed, 35816 insertions(+), 21174 deletions(-) diff --git a/python/client-contract/CHANGELOG.md b/python/client-contract/CHANGELOG.md index 1a91094..f78ec72 100644 --- a/python/client-contract/CHANGELOG.md +++ b/python/client-contract/CHANGELOG.md @@ -7,11 +7,11 @@ All notable changes to the `dfo-spec-kit-client-contract` Python package will be ### 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 `d80df9f5fd598b7345255470932d202ee5d49942`. The document admits `timed_out` as a no_data reason and the optional `entity_refs` on each answer part, a list of `EntityRefs` with one entry per restatement entity row, the graph nodes that row binds, and a stored manifest warning states its counts and the refs it names (`CountedRefsModel`, `CountedEntityYearsModel`, `EntityYearsModel`). `NoDataOption` and `SentenceToken` carry `entity_choice`, the index into `NoData.ambiguous_entities` of the group an entity_ambiguous option settles or a slot token asks, so a client groups a place menu by it when two wordings share one text. +- `served/openapi.json`, the composed dfo-apis app's OpenAPI document, and `served/SOURCE.json`, naming dfo-apis commit `ccb6617922c839ce3cd5615a3bbb65c70bfe1bde`. The document admits `timed_out` as a no_data reason and the optional `entity_refs` on each answer part, a list of `EntityRefs` with one entry per restatement entity row, the graph nodes that row binds, and a stored manifest warning states its counts and the refs it names (`CountedRefsModel`, `CountedEntityYearsModel`, `EntityYearsModel`). `NoDataOption` and `SentenceToken` carry `entity_choice`, the index into `NoData.ambiguous_entities` of the group an entity_ambiguous option settles or a slot token asks, so a client groups a place menu by it when two wordings share one text. - `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 148 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 126 scenarios: 34 recorded against the deployed dfo-apis dev app at `d80df9f5f`, and 92 synthetic, each derived from a recorded one by a one-line edit, with 21 binary bodies totalling 1,134,603 bytes and records and bodies together 13,695,441 bytes. `search-place-ambiguous-twice` pins two entity_ambiguous groups of one text, each option and slot token naming its group by `entity_choice`, and `choose-refused-label-in-two-groups` pins that a label both groups offer matches two options, so a choice there names its option by index. 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 retryable refusal whose Retry-After passes the 60-second cap, 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 202 that reads running, polls whose `retry_after_ms` changes from one to the next, 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: the first version it lists with no `base_content_version`, the newest plain build, so a derived version listed before it is skipped. +- `scenario.schema.json`, the scenario record, and 126 scenarios: 34 recorded against the deployed dfo-apis dev app at `ccb661792`, and 92 synthetic, each derived from a recorded one by a one-line edit, with 21 binary bodies totalling 1,142,020 bytes and records and bodies together 14,160,817 bytes. `search-place-ambiguous-twice` pins two entity_ambiguous groups of one text, each option and slot token naming its group by `entity_choice`, and `choose-refused-label-in-two-groups` pins that a label both groups offer matches two options, so a choice there names its option by index. 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 retryable refusal whose Retry-After passes the 60-second cap, 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 202 that reads running, polls whose `retry_after_ms` changes from one to the next, 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: the first version it lists with no `base_content_version`, the newest plain build, so a derived version listed before it is skipped. - `client-codes.json` and its schema: the 23 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, which the proxy sends in problem documents of the shape every refusal has, both retryable, with `Retry-After` on the 429, so a client reads one refusal shape, and `warning-codes.json` and its schema, the 7 codes a client sets on the warnings it issues itself, with the `proxy_codes()` and `warning_codes()` accessors. - `ref_digest_changed` in `warning-codes.json`, a `DfoWarning` for a ref member whose `content_version` serves a file with another digest than the ref's, because the server rendered the same data again. The client returns the data, with no error under strict. 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 index e6a2563..acb0db4 100644 --- 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 @@ -8,12 +8,12 @@ "members": [ { "parts": [], - "sentence": "Gross disbursements to Kenya from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to Kenya from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a.", "spec": { - "spec_id": "spec_73897fdfb0206fcf27c5898b353348fb", + "spec_id": "spec_e14699f9dcd167f0211081a726ae1031", "definition": { "schema_version": 1, - "spec_id": "spec_73897fdfb0206fcf27c5898b353348fb", + "spec_id": "spec_e14699f9dcd167f0211081a726ae1031", "identity": { "shape": { "kind": "statvar_schema", @@ -45,7 +45,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -65,9 +65,9 @@ } } }, - "content_version": "cv_2aa4cc2fd852cd9b84347c61d07d609a", + "content_version": "cv_574e68a18917407b0f5534cfc9ff001b", "artifact": { - "digest": "sha256:05d0cbf59e8dddd7162104bf8e2edc406fc402a0b8d0d971452d01b07b0ee426", + "digest": "sha256:7ef1038eb25d978077bb4f5b9c54e940052ccd2aedd3284e6fb9739f1deca1f4", "rendering": { "format": "parquet", "bundle": false 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 index 00abc2b..69a5076 100644 --- 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 @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "2de415a9f27d4ce69e4f1eb97b5951af" + "x-dfo-trace-id": "b250c3db1b784b9fa66b8173b78a6c0f" }, "json": { "schema_version": 1, @@ -41,20 +41,21 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "2de415a9f27d4ce69e4f1eb97b5951af", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "b250c3db1b784b9fa66b8173b78a6c0f", "warnings": [], "timing_ms": { - "total": 4676, + "total": 28220, "by_step": { - "coverage": 1, - "extract": 1, - "cache_lookup": 0 + "coverage": 0, + "extract": 957, + "exclusion_read": 667, + "cache_lookup": 1 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, + "input_tokens": 2796, + "output_tokens": 152, "cached_tokens": 0, "jev_input_tokens": 13359, "jev_output_tokens": 2855 @@ -65,33 +66,39 @@ "parts": [ { "variable_text": "mortality", - "warnings": [], + "warnings": [ + { + "code": "membership_unverified", + "severity": "warn", + "message": "the full set of series behind this answer could not be confirmed, so it uses the series the search found; a dataset made from it may hold different series." + } + ], "timing_ms": { - "total": 4672, + "total": 26613, "by_step": { - "recall": 1, + "recall": 4404, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 6, - "shape_probe": 120, + "shape_probe": 126, "shape_groups": 6, "shape_labels": 2, - "shape_admission": 1, + "shape_admission": 2, "phase_derive_shapes": 0, - "shape": 258, + "shape": 238, "phase_prune_and_rank": 0, - "bind": 154, - "phase_bind": 18, + "bind": 145, + "phase_bind": 25, "phase_settle": 1, - "phase_place_bindings": 39, + "phase_place_bindings": 7249, "phase_facet_requests": 0, - "materialise": 202, - "phase_materialise": 33, - "answer": 30, - "phase_outcome": 3936 + "materialise": 1955, + "phase_materialise": 113, + "answer": 1043, + "phase_outcome": 11440 } }, - "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", + "rendered_sentence": "2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", "sentence_plan": [ { "kind": "text", @@ -144,7 +151,7 @@ }, { "kind": "text", - "text": "per capita", + "text": "per 1,000 people", "segment": "heading", "entity_refs": [], "states": [] @@ -623,7 +630,7 @@ "source": "observed" } ], - "rendered_sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators.", + "rendered_sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators.", "sentence_plan": [ { "kind": "slot", @@ -668,11 +675,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [] + "states": [ + "unit:" + ] }, { "kind": "slot", @@ -810,7 +820,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -819,7 +829,8 @@ "confidence": "high", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "World Development Indicators" } }, "1": { @@ -992,7 +1003,7 @@ "label": "data source" } ], - "member_count": 2978, + "member_count": 10, "refine_supported": true, "data_commons": [ { @@ -1171,9 +1182,8 @@ ], "unresolved_slots": [], "stat_vars": { - "member_count": 37, + "member_count": 1, "member_count_exact": false, - "served_count": 1, "data_date_range": { "start": "2018", "end": "2022" @@ -2362,7 +2372,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2372,7 +2382,8 @@ "basis": "structural", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "Kenya Census" } } }, @@ -2384,7 +2395,7 @@ } } ], - "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", + "rendered_sentence": "2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", "sentence_plan": [ { "kind": "text", @@ -2444,7 +2455,7 @@ }, { "kind": "text", - "text": "per capita", + "text": "per 1,000 people", "segment": "heading", "entity_refs": [], "states": [], @@ -2597,7 +2608,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "2de415a9f27d4ce69e4f1eb97b5951af" + "trace_id": "b250c3db1b784b9fa66b8173b78a6c0f" } } ] 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 index 6da0d9d..d5f6b3f 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:01Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:35:53Z" }, "call": [ { @@ -38,7 +38,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "2de415a9f27d4ce69e4f1eb97b5951af" + "x-dfo-trace-id": "b250c3db1b784b9fa66b8173b78a6c0f" }, "json": { "schema_version": 1, @@ -49,20 +49,21 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "2de415a9f27d4ce69e4f1eb97b5951af", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "b250c3db1b784b9fa66b8173b78a6c0f", "warnings": [], "timing_ms": { - "total": 4676, + "total": 28220, "by_step": { - "coverage": 1, - "extract": 1, - "cache_lookup": 0 + "coverage": 0, + "extract": 957, + "exclusion_read": 667, + "cache_lookup": 1 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, + "input_tokens": 2796, + "output_tokens": 152, "cached_tokens": 0, "jev_input_tokens": 13359, "jev_output_tokens": 2855 @@ -73,33 +74,39 @@ "parts": [ { "variable_text": "mortality", - "warnings": [], + "warnings": [ + { + "code": "membership_unverified", + "severity": "warn", + "message": "the full set of series behind this answer could not be confirmed, so it uses the series the search found; a dataset made from it may hold different series." + } + ], "timing_ms": { - "total": 4672, + "total": 26613, "by_step": { - "recall": 1, + "recall": 4404, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 6, - "shape_probe": 120, + "shape_probe": 126, "shape_groups": 6, "shape_labels": 2, - "shape_admission": 1, + "shape_admission": 2, "phase_derive_shapes": 0, - "shape": 258, + "shape": 238, "phase_prune_and_rank": 0, - "bind": 154, - "phase_bind": 18, + "bind": 145, + "phase_bind": 25, "phase_settle": 1, - "phase_place_bindings": 39, + "phase_place_bindings": 7249, "phase_facet_requests": 0, - "materialise": 202, - "phase_materialise": 33, - "answer": 30, - "phase_outcome": 3936 + "materialise": 1955, + "phase_materialise": 113, + "answer": 1043, + "phase_outcome": 11440 } }, - "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", + "rendered_sentence": "2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", "sentence_plan": [ { "kind": "text", @@ -152,7 +159,7 @@ }, { "kind": "text", - "text": "per capita", + "text": "per 1,000 people", "segment": "heading", "entity_refs": [], "states": [] @@ -631,7 +638,7 @@ "source": "observed" } ], - "rendered_sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators.", + "rendered_sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators.", "sentence_plan": [ { "kind": "slot", @@ -676,11 +683,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [] + "states": [ + "unit:" + ] }, { "kind": "slot", @@ -818,7 +828,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -827,7 +837,8 @@ "confidence": "high", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "World Development Indicators" } }, { @@ -1000,7 +1011,7 @@ "label": "data source" } ], - "member_count": 2978, + "member_count": 10, "refine_supported": true, "data_commons": [ { @@ -1179,9 +1190,8 @@ ], "unresolved_slots": [], "stat_vars": { - "member_count": 37, + "member_count": 1, "member_count_exact": false, - "served_count": 1, "data_date_range": { "start": "2018", "end": "2022" @@ -2370,7 +2380,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2380,7 +2390,8 @@ "basis": "structural", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "Kenya Census" } } ], @@ -2392,7 +2403,7 @@ } } ], - "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", + "rendered_sentence": "2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", "sentence_plan": [ { "kind": "text", @@ -2452,7 +2463,7 @@ }, { "kind": "text", - "text": "per capita", + "text": "per 1,000 people", "segment": "heading", "entity_refs": [], "states": [], @@ -2651,7 +2662,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "97f100748b194ca09afc06c9dc1ac81d" + "x-dfo-trace-id": "50796872852647b9830003fca9213a89" }, "json": { "schema_version": 1, @@ -2660,11 +2671,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "97f100748b194ca09afc06c9dc1ac81d", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "50796872852647b9830003fca9213a89", "warnings": [], "timing_ms": { - "total": 345, + "total": 1601, "by_step": { "coverage": 0 } @@ -2677,19 +2688,39 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 284, + "total": 1298, "by_step": { - "validate": 0, - "walk": 0, + "validate": 1, + "phase_validate": 0, + "walk": 510, "reread_arcs": 0, + "phase_reread_arcs": 0, "detect_edits": 0, + "phase_detect_edits": 0, "resolve_survivors": 0, - "shape": 174, + "phase_resolve_survivors": 0, + "shape": 651, + "phase_build_shape": 0, "bind": 0, + "phase_build_bindings": 0, "where_places": 0, - "materialise": 107, - "answer": 2, - "options": 1 + "phase_where_places": 0, + "materialise": 10, + "phase_materialise": 0, + "ground_related": 12, + "ground_units": 0, + "ground_facets": 0, + "ground_convert": 0, + "answer": 1, + "ground_gates": 0, + "phase_ground_build": 2, + "finalize_preview": 0, + "options": 1, + "finalize_related": 110, + "finalize_wholes": 0, + "finalize_relaunch": 0, + "phase_finalize": 0, + "served_entry": 0 } }, "entity_refs": [], @@ -3024,7 +3055,7 @@ "source": "observed" } ], - "rendered_sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators.", + "rendered_sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators.", "sentence_plan": [ { "kind": "slot", @@ -3068,11 +3099,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [] + "states": [ + "unit:" + ] }, { "kind": "slot", @@ -3208,12 +3242,13 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9" + "capability_version": "cap_4913302d7a6b6435" }, "confidence": "high", "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "World Development Indicators", "related_group": { "ref": "dc/g/MortalityEvent", "label": "Mortality Event" @@ -3254,7 +3289,7 @@ } } ], - "rendered_sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators.", + "rendered_sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators.", "sentence_plan": [ { "kind": "slot", @@ -3303,11 +3338,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [], + "states": [ + "unit:" + ], "part_index": 0 }, { @@ -3430,7 +3468,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "1607014b90c1472db06c480ad25623d1" + "x-dfo-trace-id": "b6c465bacda941fda5a2501a028854ec" }, "json": { "schema_version": 1, @@ -3637,8 +3675,8 @@ "family_member_digest": "c090b56d31a596a8be16dafb518382db666c6b100a80534c3cb81dbfe3111c5d", "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261023T061534Z-06fa7b89", - "served_from": "head", - "confirmed_at": "2026-10-26T09:17:50.952592+00:00" + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:36:31.090993+00:00" }, "warnings": [], "diagnostics": [ @@ -3677,7 +3715,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -3754,7 +3792,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "observationAbout", @@ -3766,7 +3805,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "observationAbout", @@ -3778,7 +3818,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "observationAbout", @@ -3790,7 +3831,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false } ], "long_layout_defaults": [ @@ -3816,7 +3858,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-22T17:34:00.253769Z" @@ -3834,7 +3876,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A38f1b5db24567c68f9791ac00bce803082c607f23c78688edf2d95e0778a070a?X-Goog-Signature=redacted", - "x-dfo-trace-id": "08870d34b30642f8b5dc651859af6425" + "x-dfo-trace-id": "2fa64ff5aca8449f9839b1d94443c428" } } }, @@ -3857,7 +3899,7 @@ "answer": { "kind": "resolution", "status": "candidates", - "sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", + "sentence": "2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", "complete": false, "specs": [], "gaps": [ @@ -3873,7 +3915,7 @@ "answer": { "kind": "resolution", "status": "definite", - "sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators.", + "sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators.", "complete": true, "specs": [ "spec_10bf62f9687154286b463d206f03a086" @@ -3909,7 +3951,7 @@ ], "spec_id": "spec_10bf62f9687154286b463d206f03a086", "content_version": "cv_9834a942532e03aac3aa48f2cf731a4c", - "sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators." + "sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators." } ], "missing": [], 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 index d55b3e7..9d79b55 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-catalogue.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-catalogue.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:23:10Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:39:03Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "f384c8a7105445ed8da7d4f21c168a64" + "x-dfo-trace-id": "a2c1f7531a0d49d1928113c1ccc2fa03" }, "json": { "schema_version": 1, @@ -45,22 +45,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "f384c8a7105445ed8da7d4f21c168a64", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "a2c1f7531a0d49d1928113c1ccc2fa03", "warnings": [], "timing_ms": { - "total": 969, + "total": 697, "by_step": { "coverage": 0, - "extract": 967, + "extract": 696, + "exclusion_read": 644, "entity_check": 0, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2227, - "output_tokens": 45, - "cached_tokens": 840 + "input_tokens": 2776, + "output_tokens": 50, + "cached_tokens": 0 }, "timed_out": false }, @@ -84,7 +85,7 @@ "error": { "class": "DeclinedError", "code": "answer_declined", - "trace_id": "f384c8a7105445ed8da7d4f21c168a64" + "trace_id": "a2c1f7531a0d49d1928113c1ccc2fa03" } } ] 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 index 1e7c21c..83875b0 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/answer-declined.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/answer-declined.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:23:09Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:39:02Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "518bf1ffcf3d4739b1a9d866a0cab91a" + "x-dfo-trace-id": "32984221d8124bab90fe9fdae1b3ec30" }, "json": { "schema_version": 1, @@ -45,22 +45,23 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "518bf1ffcf3d4739b1a9d866a0cab91a", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "32984221d8124bab90fe9fdae1b3ec30", "warnings": [], "timing_ms": { - "total": 902, + "total": 816, "by_step": { "coverage": 0, - "extract": 901, + "extract": 815, + "exclusion_read": 788, "entity_check": 0, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2229, - "output_tokens": 64, - "cached_tokens": 840 + "input_tokens": 2780, + "output_tokens": 73, + "cached_tokens": 0 }, "timed_out": false }, @@ -90,7 +91,7 @@ "error": { "class": "DeclinedError", "code": "answer_declined", - "trace_id": "518bf1ffcf3d4739b1a9d866a0cab91a" + "trace_id": "32984221d8124bab90fe9fdae1b3ec30" } } ] 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 index 7d66613..3bee37a 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:21:59Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:34:11Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c7cb40f3790f4a15a0ddcad0cc93c9bb" + "x-dfo-trace-id": "92a325e77a854c5daafa875164b5e23e" }, "json": { "schema_version": 1, @@ -42,23 +42,27 @@ "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": true + "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "c7cb40f3790f4a15a0ddcad0cc93c9bb", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "92a325e77a854c5daafa875164b5e23e", "warnings": [], "timing_ms": { - "total": 3, + "total": 17540, "by_step": { "coverage": 0, - "response_cache_layer1": 1 + "extract": 1239, + "exclusion_read": 719, + "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cached_tokens": 0 + "input_tokens": 2784, + "output_tokens": 111, + "cached_tokens": 0, + "jev_input_tokens": 6695, + "jev_output_tokens": 2088 }, "timed_out": false }, @@ -68,30 +72,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3011, + "total": 16265, "by_step": { - "recall": 457, + "recall": 2821, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 2, - "shape_probe_coverage": 8, - "shape_probe": 114, - "shape_groups": 579, + "shape_probe_coverage": 104, + "shape_probe": 352, + "shape_groups": 109, "shape_labels": 1, - "shape_admission": 2, + "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 1247, + "shape": 1134, "phase_prune_and_rank": 0, - "bind": 266, - "phase_bind": 327, - "phase_settle": 46, - "phase_place_bindings": 57, + "bind": 5473, + "phase_bind": 345, + "phase_settle": 105, + "phase_place_bindings": 1078, "phase_facet_requests": 0, - "materialise": 44, - "phase_materialise": 200, - "answer": 220, - "options": 55, - "phase_outcome": 92 + "materialise": 2132, + "phase_materialise": 313, + "answer": 1829, + "options": 872, + "phase_outcome": 163 } }, "restatement": { @@ -538,7 +542,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -596,7 +600,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1606, + "member_count": 1614, "served_rows": 1, "served_rows_exact": true }, @@ -610,7 +614,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1331, + "member_count": 1337, "served_rows": 6, "served_rows_exact": true }, @@ -637,7 +641,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityC", - "member_count": 7005, + "member_count": 7041, "served_rows": 7, "served_rows_exact": true }, @@ -733,7 +737,7 @@ }, "relation": "child", "parent": "CRSTypeOfFinance100", - "member_count": 12672, + "member_count": 12745, "served_rows": 30, "served_rows_exact": true } @@ -760,7 +764,7 @@ "value_kind": "enum_value" }, "relation": "root", - "member_count": 14098, + "member_count": 14146, "served_rows": 30, "served_rows_exact": true } @@ -1191,7 +1195,7 @@ "selected": [] } ], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -1199,214 +1203,7 @@ }, "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 - } - ], + "alternative_measures": [], "measure_label": "gross disbursements", "measure_label_axes": [ "populationType", @@ -1452,6 +1249,8 @@ } } ], + "concept_label": "basic health care", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsTypeOfFinance", @@ -3477,6 +3276,363 @@ "destination": "NGN", "origin": "EUR" } + }, + "scope_choices": { + "id": "spec_774d6c001a6250aa67ca676ab067895e", + "base": { + "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" + } + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [ + { + "axis": "sector", + "option_id": "sector:12220", + "provenance": "explicit", + "origin": { + "kind": "text", + "text": "basic health care", + "start": 46, + "end": 63 + } + } + ], + "dropped_entries": [], + "choices": [ + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:sector", + "axis": "sector", + "rule": "sector_code", + "provenance": "explicit", + "active": "sector:12220", + "options": [ + { + "option_id": "sector:12220", + "label": "basic health care (CRS 12220)", + "binding": { + "kind": "slot", + "slot": "crsPurpose", + "state": "value", + "refs": [ + "CRSPurposeCode12220" + ] + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:gross", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:provider", + "axis": "provider", + "rule": "bilateral_flows", + "provenance": "default", + "active": "provider:bilateral", + "options": [ + { + "option_id": "provider:bilateral", + "label": "bilateral flows only", + "binding": { + "kind": "provider", + "scope": "bilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "provider:inclusive", + "label": "bilateral plus imputed multilateral, 2020 to 2024", + "binding": { + "kind": "provider", + "scope": "inclusive", + "window": [ + 2020, + 2024 + ], + "provenance": "provenance/ONEBilateralAndImputedMultilateral" + }, + "availability": { + "status": "partial", + "years": [ + [ + 2011, + 2016 + ], + [ + 2020, + 2024 + ] + ], + "code": "imputed_coverage", + "detail": {} + } + } + ] + } + ], + "compiled": { + "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" + } + }, + "components": [ + { + "role": "whole", + "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" + } + } + } + ] + }, + "ledger": [] } } } @@ -3790,7 +3946,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4c3f35c8c0d44b99941a73a9519b41d2" + "x-dfo-trace-id": "fff69a3d23f5431c8a34da1b72c9e034" }, "json": { "schema_version": 1, @@ -4190,8 +4346,8 @@ "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", - "served_from": "head", - "confirmed_at": "2026-10-26T09:17:22.037029+00:00" + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:35:51.549820+00:00" }, "warnings": [ { @@ -4221,7 +4377,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -4237,7 +4393,7 @@ ], "series_count": 5, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -4320,7 +4476,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -4332,7 +4489,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -4344,7 +4502,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -4356,7 +4515,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -4368,7 +4528,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -4380,7 +4541,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -4392,7 +4554,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4404,7 +4567,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4416,7 +4580,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4428,7 +4593,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4440,7 +4606,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4452,7 +4619,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4464,7 +4632,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4476,7 +4645,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -4520,7 +4690,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": true } @@ -4537,7 +4707,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "333ab72de55449ed8288a5f458406a4c" + "x-dfo-trace-id": "815c18c3e59945d6ade9f99db58f2960" } } }, 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 index 5b84639..e5ad972 100644 --- 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 @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c7cb40f3790f4a15a0ddcad0cc93c9bb" + "x-dfo-trace-id": "92a325e77a854c5daafa875164b5e23e" }, "json": { "schema_version": 1, @@ -38,23 +38,27 @@ "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": true + "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "c7cb40f3790f4a15a0ddcad0cc93c9bb", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "92a325e77a854c5daafa875164b5e23e", "warnings": [], "timing_ms": { - "total": 3, + "total": 17540, "by_step": { "coverage": 0, - "response_cache_layer1": 1 + "extract": 1239, + "exclusion_read": 719, + "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cached_tokens": 0 + "input_tokens": 2784, + "output_tokens": 111, + "cached_tokens": 0, + "jev_input_tokens": 6695, + "jev_output_tokens": 2088 }, "timed_out": false }, @@ -64,30 +68,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3011, + "total": 16265, "by_step": { - "recall": 457, + "recall": 2821, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 2, - "shape_probe_coverage": 8, - "shape_probe": 114, - "shape_groups": 579, + "shape_probe_coverage": 104, + "shape_probe": 352, + "shape_groups": 109, "shape_labels": 1, - "shape_admission": 2, + "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 1247, + "shape": 1134, "phase_prune_and_rank": 0, - "bind": 266, - "phase_bind": 327, - "phase_settle": 46, - "phase_place_bindings": 57, + "bind": 5473, + "phase_bind": 345, + "phase_settle": 105, + "phase_place_bindings": 1078, "phase_facet_requests": 0, - "materialise": 44, - "phase_materialise": 200, - "answer": 220, - "options": 55, - "phase_outcome": 92 + "materialise": 2132, + "phase_materialise": 313, + "answer": 1829, + "options": 872, + "phase_outcome": 163 } }, "restatement": { @@ -534,7 +538,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -592,7 +596,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1606, + "member_count": 1614, "served_rows": 1, "served_rows_exact": true }, @@ -606,7 +610,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1331, + "member_count": 1337, "served_rows": 6, "served_rows_exact": true }, @@ -633,7 +637,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityC", - "member_count": 7005, + "member_count": 7041, "served_rows": 7, "served_rows_exact": true }, @@ -729,7 +733,7 @@ }, "relation": "child", "parent": "CRSTypeOfFinance100", - "member_count": 12672, + "member_count": 12745, "served_rows": 30, "served_rows_exact": true } @@ -756,7 +760,7 @@ "value_kind": "enum_value" }, "relation": "root", - "member_count": 14098, + "member_count": 14146, "served_rows": 30, "served_rows_exact": true } @@ -1187,7 +1191,7 @@ "selected": [] } ], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -1195,214 +1199,7 @@ }, "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 - } - ], + "alternative_measures": [], "measure_label": "gross disbursements", "measure_label_axes": [ "populationType", @@ -1448,6 +1245,8 @@ } } ], + "concept_label": "basic health care", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsTypeOfFinance", @@ -3473,6 +3272,363 @@ "destination": "NGN", "origin": "EUR" } + }, + "scope_choices": { + "id": "spec_774d6c001a6250aa67ca676ab067895e", + "base": { + "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" + } + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [ + { + "axis": "sector", + "option_id": "sector:12220", + "provenance": "explicit", + "origin": { + "kind": "text", + "text": "basic health care", + "start": 46, + "end": 63 + } + } + ], + "dropped_entries": [], + "choices": [ + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:sector", + "axis": "sector", + "rule": "sector_code", + "provenance": "explicit", + "active": "sector:12220", + "options": [ + { + "option_id": "sector:12220", + "label": "basic health care (CRS 12220)", + "binding": { + "kind": "slot", + "slot": "crsPurpose", + "state": "value", + "refs": [ + "CRSPurposeCode12220" + ] + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:gross", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:provider", + "axis": "provider", + "rule": "bilateral_flows", + "provenance": "default", + "active": "provider:bilateral", + "options": [ + { + "option_id": "provider:bilateral", + "label": "bilateral flows only", + "binding": { + "kind": "provider", + "scope": "bilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "provider:inclusive", + "label": "bilateral plus imputed multilateral, 2020 to 2024", + "binding": { + "kind": "provider", + "scope": "inclusive", + "window": [ + 2020, + 2024 + ], + "provenance": "provenance/ONEBilateralAndImputedMultilateral" + }, + "availability": { + "status": "partial", + "years": [ + [ + 2011, + 2016 + ], + [ + 2020, + 2024 + ] + ], + "code": "imputed_coverage", + "detail": {} + } + } + ] + } + ], + "compiled": { + "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" + } + }, + "components": [ + { + "role": "whole", + "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" + } + } + } + ] + }, + "ledger": [] } } } @@ -3704,7 +3860,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "c7cb40f3790f4a15a0ddcad0cc93c9bb" + "trace_id": "92a325e77a854c5daafa875164b5e23e" } } ] 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 index 7b3098b..383b5a9 100644 --- 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 @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1" + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0" }, "json": { "schema_version": 1, @@ -41,21 +41,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -101,7 +102,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "01cf4a9623c449759f24d249f8783de1" + "trace_id": "1d05424fb2784068acf168d73a67c0d0" } } ] 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 index 9a7302c..a5a841e 100644 --- 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 @@ -33,7 +33,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "5e0f0d6a5a6442a38932b02d7f72ed6c" + "x-dfo-trace-id": "c58dd2d53f1d4340a3f1fcb4c72681c5" }, "json": { "schema_version": 1, @@ -41,23 +41,27 @@ "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": true + "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "5e0f0d6a5a6442a38932b02d7f72ed6c", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "c58dd2d53f1d4340a3f1fcb4c72681c5", "warnings": [], "timing_ms": { - "total": 8, + "total": 6877, "by_step": { "coverage": 0, - "response_cache_layer1": 1 + "extract": 1225, + "exclusion_read": 636, + "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cached_tokens": 0 + "input_tokens": 2796, + "output_tokens": 224, + "cached_tokens": 0, + "jev_input_tokens": 25826, + "jev_output_tokens": 5796 }, "timed_out": false }, @@ -66,30 +70,30 @@ { "warnings": [], "timing_ms": { - "total": 4401, + "total": 4245, "by_step": { - "recall": 1271, + "recall": 1975, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 108, - "shape_probe_coverage": 4, - "shape_probe": 113, - "shape_groups": 72, - "shape_labels": 12, - "shape_admission": 0, + "shape_arcs": 1, + "shape_probe_coverage": 5, + "shape_probe": 116, + "shape_groups": 62, + "shape_labels": 11, + "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 524, + "shape": 280, "phase_prune_and_rank": 0, - "bind": 482, - "phase_bind": 205, - "phase_settle": 57, - "phase_place_bindings": 34, + "bind": 227, + "phase_bind": 195, + "phase_settle": 82, + "phase_place_bindings": 31, "phase_facet_requests": 0, - "materialise": 686, - "phase_materialise": 225, - "answer": 28, - "options": 685, - "phase_outcome": 204 + "materialise": 858, + "phase_materialise": 171, + "answer": 78, + "options": 214, + "phase_outcome": 134 } }, "restatement": { @@ -126,10 +130,10 @@ "assumptions": [], "status": "definite", "spec": { - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "definition": { "schema_version": 1, - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "identity": { "identity_version": "spec1", "shape": { @@ -152,7 +156,8 @@ "state": "set", "refs": [ "CRSPurposeCode110", - "CRSPurposeCode120" + "CRSPurposeCode120", + "CRSPurposeCode130" ] } }, @@ -200,7 +205,7 @@ "resolved": { "shape": { "shape_id": "financialflow_amount_measuredvalue_nominal", - "label": "gross disbursements (official development assistance)", + "label": "gross disbursements (education, health and population policy, programme, and reproductive health, official development assistance)", "population_type": { "ref": "FinancialFlow", "label": "financial flow" @@ -280,8 +285,8 @@ "label": "data source" } ], - "member_count": 545, - "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "member_count": 634, + "member_digest": "5c91c0a8d90f4619a1ff7122cacdc8b0bc48b22c70516d7673aec42caf6da0d4", "refine_supported": true, "data_commons": [ { @@ -316,6 +321,13 @@ "label": "health" }, "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" + }, + "value_kind": "enum_value" } ] }, @@ -408,6 +420,26 @@ { "ref": "CRSPurposeCode12382", "label": "research for noncommunicable disease prevention and control" + }, + { + "ref": "CRSPurposeCode13010", + "label": "population policy and administrative management" + }, + { + "ref": "CRSPurposeCode13020", + "label": "reproductive health care" + }, + { + "ref": "CRSPurposeCode13030", + "label": "family planning" + }, + { + "ref": "CRSPurposeCode13040", + "label": "sexually transmitted disease control" + }, + { + "ref": "CRSPurposeCode13081", + "label": "personnel development for population and reproductive health" } ] }, @@ -547,9 +579,9 @@ ], "unresolved_slots": [], "stat_vars": { - "member_count": 108, + "member_count": 123, "member_count_exact": true, - "served_count": 545, + "served_count": 634, "data_date_range": { "start": "1997", "end": "2024" @@ -579,15 +611,21 @@ }, { "label": "observations", - "count": 12 + "count": 19 }, { "label": "variables", - "count": 51 + "count": 66 } ] }, "facets": { + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + }, "provenance": { "basis": "fallback", "ref": "provenance/OECDCreditorReportingSystem", @@ -602,12 +640,6 @@ }, "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", "account": "provider" - }, - "unit": { - "basis": "fallback", - "ref": "CurrencyUSD", - "label": "US Dollar", - "currency": "USD" } }, "slot_options": [ @@ -624,45 +656,85 @@ { "value": { "ref": { - "ref": "CRSPurposeCode121", - "label": "general health" + "ref": "CRSPurposeCode998", + "label": "unallocated and unspecified" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 76, + "served_rows": 74, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode99810", + "label": "sectors not specified" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 6, - "served_rows": 82, + "parent": "CRSPurposeCode998", + "member_count": 255, + "served_rows": 71, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode122", - "label": "basic health" + "ref": "CRSPurposeCode99820", + "label": "non-sector allocable promotion of development awareness" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 4, - "served_rows": 108, + "parent": "CRSPurposeCode998", + "member_count": 77, + "served_rows": 3, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode600", + "label": "action relating to debt" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 21, + "served_rows": 9, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode123", - "label": "noncommunicable disease" + "ref": "CRSPurposeCode60020", + "label": "debt forgiveness" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 3, + "parent": "CRSPurposeCode600", + "member_count": 75, "served_rows": 4, "served_rows_exact": true }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode60040", + "label": "rescheduling and refinancing" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode600", + "member_count": 54, + "served_rows": 5, + "served_rows_exact": true + }, { "value": { "ref": { @@ -671,7 +743,7 @@ }, "value_kind": "enum_value" }, - "relation": "parent", + "relation": "root", "member_count": 13, "served_rows": 1214, "served_rows_exact": true @@ -679,360 +751,760 @@ { "value": { "ref": { - "ref": "CRSPurposeCode111", - "label": "unspecified-level education" + "ref": "CRSPurposeCode140", + "label": "water supply and sanitation" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode110", - "member_count": 6, - "served_rows": 78, + "parent": "CRSPurposeCode100", + "member_count": 10, + "served_rows": 275, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode112", - "label": "basic education" + "ref": "CRSPurposeCode110", + "label": "education" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode110", + "parent": "CRSPurposeCode100", + "member_count": 9, + "served_rows": 318, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode160", + "label": "other social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 7, + "served_rows": 102, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode100", "member_count": 6, - "served_rows": 77, + "served_rows": 194, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode113", - "label": "upper secondary education" + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode110", + "parent": "CRSPurposeCode100", "member_count": 5, - "served_rows": 69, + "served_rows": 81, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode114", - "label": "post-secondary education" + "ref": "CRSPurposeCode150", + "label": "government and civil society" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode110", + "parent": "CRSPurposeCode100", "member_count": 4, - "served_rows": 94, + "served_rows": 244, "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" + "ref": "CRSPurposeCode200", + "label": "economic infrastructure and services" }, "value_kind": "enum_value" }, "relation": "root", - "member_count": 0, - "served_rows": 501, + "member_count": 13, + "served_rows": 286, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSTypeOfFinance110", - "label": "standard grant" + "ref": "CRSPurposeCode240", + "label": "banking and financial services" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSTypeOfFinance100", - "member_count": 12672, - "served_rows": 501, + "parent": "CRSPurposeCode200", + "member_count": 16, + "served_rows": 30, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSTypeOfFinance420", - "label": "debt instrument" + "ref": "CRSPurposeCode220", + "label": "communication system and technology" }, "value_kind": "enum_value" }, - "relation": "root", - "member_count": 0, - "served_rows": 11, + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 13, + "served_rows": 23, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSTypeOfFinance421", - "label": "standard loan" + "ref": "CRSPurposeCode250", + "label": "business environment and governance" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSTypeOfFinance420", - "member_count": 4620, - "served_rows": 11, + "parent": "CRSPurposeCode200", + "member_count": 13, + "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" + "ref": "CRSPurposeCode210", + "label": "transport and storage" }, "value_kind": "enum_value" }, - "relation": "root", - "member_count": 14098, - "served_rows": 512, + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 7, + "served_rows": 97, "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" + "ref": "CRSPurposeCode230", + "label": "energy" }, "value_kind": "enum_value" }, - "relation": "root", - "member_count": 0, - "served_rows": 104, + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 7, + "served_rows": 106, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityB03", - "label": "contribution to specific-purpose programme and fund managed by an international organisation" + "ref": "CRSPurposeCode300", + "label": "productive sector" }, "value_kind": "enum_value" }, - "relation": "child", - "parent": "CRSCooperationModalityB", - "member_count": 1606, - "served_rows": 21, + "relation": "root", + "member_count": 13, + "served_rows": 493, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityB01", - "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + "ref": "CRSPurposeCode310", + "label": "agriculture, forestry and fishing" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityB", - "member_count": 1331, - "served_rows": 83, + "parent": "CRSPurposeCode300", + "member_count": 12, + "served_rows": 405, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityC", - "label": "project-type intervention (group)" + "ref": "CRSPurposeCode320", + "label": "industry, mining and construction" }, "value_kind": "enum_value" }, - "relation": "root", - "member_count": 0, - "served_rows": 136, + "relation": "child", + "parent": "CRSPurposeCode300", + "member_count": 9, + "served_rows": 66, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityC01", - "label": "project-type intervention" + "ref": "CRSPurposeCode331", + "label": "trade policies and regulations" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityC", - "member_count": 7005, - "served_rows": 136, + "parent": "CRSPurposeCode300", + "member_count": 7, + "served_rows": 22, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityD", - "label": "expert and other technical assistance" + "ref": "CRSPurposeCode400", + "label": "multisector" }, "value_kind": "enum_value" }, "relation": "root", - "member_count": 0, - "served_rows": 111, + "member_count": 7, + "served_rows": 206, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityD02", - "label": "other technical assistance" + "ref": "CRSPurposeCode430", + "label": "other multisector" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityD", - "member_count": 1600, - "served_rows": 84, + "parent": "CRSPurposeCode400", + "member_count": 10, + "served_rows": 162, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityD01", - "label": "donor country personnel" + "ref": "CRSPurposeCode410", + "label": "general environment protection" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityD", - "member_count": 976, - "served_rows": 27, + "parent": "CRSPurposeCode400", + "member_count": 7, + "served_rows": 44, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityE", - "label": "scholarship and student cost in donor country" + "ref": "CRSPurposeCode500", + "label": "commodity aid and general programme assistance" }, "value_kind": "enum_value" }, "relation": "root", - "member_count": 0, - "served_rows": 38, + "member_count": 5, + "served_rows": 70, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityE01", - "label": "scholarship and training in donor country" + "ref": "CRSPurposeCode510", + "label": "budget support" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityE", - "member_count": 819, - "served_rows": 19, + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 10, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityE02", - "label": "imputed student cost" + "ref": "CRSPurposeCode520", + "label": "food assistance" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityE", - "member_count": 315, + "parent": "CRSPurposeCode500", + "member_count": 3, "served_rows": 19, "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)" + "ref": "CRSPurposeCode530", + "label": "other commodity assistance" }, - "value_kind": "source" - } - } - ], - "truncated": false, - "source": "observed" - }, - { - "axis": "unit", - "options": [ + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 41, + "served_rows_exact": true + }, { "value": { "ref": { - "ref": "CurrencyUSD", - "label": "US Dollar" + "ref": "CRSPurposeCode700", + "label": "humanitarian aid" }, "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": [ + }, + "relation": "root", + "member_count": 5, + "served_rows": 68, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode720", + "label": "emergency response" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode700", + "member_count": 6, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode730", + "label": "reconstruction and rehabilitation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode700", + "member_count": 3, + "served_rows": 14, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode740", + "label": "disaster preparedness" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode700", + "member_count": 0, + "served_rows": 8, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode930", + "label": "support for refugees and asylum seekers in donor countries" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 3, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode93010", + "label": "general support for refugees and asylum seekers in donor countries" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode930", + "member_count": 57, + "served_rows": 6, + "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": 582, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12745, + "served_rows": 582, + "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": 14146, + "served_rows": 593, + "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": 118, + "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": 1614, + "served_rows": 25, + "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": 1337, + "served_rows": 93, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 173, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7041, + "served_rows": 173, + "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": 116, + "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": 87, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 980, + "served_rows": 29, + "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" + } + ], + "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, health, and population policy, programme, and reproductive health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ { "kind": "slot", "text": "Germany", @@ -1104,7 +1576,7 @@ }, { "kind": "slot", - "text": "education and health", + "text": "education, health, and population policy, programme, and reproductive health", "axis": "how", "segment": "heading", "property_dcid": "crsPurpose", @@ -1278,6 +1750,10 @@ { "ref": "CRSPurposeCode120", "label": "health" + }, + { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" } ], "provenance": "text_recognized" @@ -1315,344 +1791,131 @@ }, { "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/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": "health", - "named": [ - { - "ref": "CRSPurposeCode120", - "label": "health" - } - ], - "slot": "crsPurpose", - "disposition": "bound", - "selected": [] - }, - { - "text": "ODA", - "named": [ - { - "ref": "CRSTypeOfFlow10", - "label": "official development assistance" - } - ], - "slot": "crsTypeOfFlow", - "disposition": "bound", - "selected": [] - }, - { - "text": "education", - "named": [ - { - "ref": "CRSPurposeCode110", - "label": "education" - } - ], - "slot": "crsPurpose", - "disposition": "bound", - "selected": [] - } - ], - "capability_version": "cap_765c9d2a0c7529b9", - "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" - ] + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" }, - "requested_window": { - "kind": "all" + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" } - } + ], + "provenance": "text_recognized" }, - "label": "commitments", - "axis": "what", - "measure_axis_values": [ - { - "axis": "populationType", - "value": { - "ref": "FinancialObligation", - "label": "financial obligation" - } + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" }, - { - "axis": "measuredProperty", - "value": { - "ref": "amount", - "label": "amount" + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" }, - { - "axis": "measurementQualifier", - "value": { - "ref": "Nominal", - "label": "nominal" + "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" }, - { - "axis": "financialObligationType", - "value": { - "ref": "Commitment", - "label": "commitment" + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "health", + "named": [ + { + "ref": "CRSPurposeCode120", + "label": "health" } - } - ], - "served_rows": 519, - "served_rows_exact": true + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + }, + { + "text": "education", + "named": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_4913302d7a6b6435", + "default_reading": { + "applied": true, + "removed_stat_vars": [] } - ], + }, + "alternative_measures": [], "measure_label": "gross disbursements", "measure_label_axes": [ "populationType", @@ -1698,6 +1961,8 @@ } } ], + "concept_label": "education, health, and population policy, programme, and reproductive health", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsTypeOfFinance", @@ -1710,7 +1975,7 @@ "ref": "CRSTypeOfFinance110", "label": "standard grant" }, - "count": 105 + "count": 120 }, { "value": { @@ -1725,42 +1990,42 @@ "property": "crsCooperationModality", "varies": true, "distinct_count": 7, - "undeclared_count": 19, + "undeclared_count": 22, "values": [ { "value": { "ref": "CRSCooperationModalityC01", "label": "project-type intervention" }, - "count": 27 + "count": 30 }, { "value": { "ref": "CRSCooperationModalityB03", "label": "contribution to specific-purpose programme and fund managed by an international organisation" }, - "count": 21 + "count": 24 }, { "value": { - "ref": "CRSCooperationModalityD02", - "label": "other technical assistance" + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" }, - "count": 16 + "count": 18 }, { "value": { - "ref": "CRSCooperationModalityB01", - "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" }, - "count": 15 + "count": 18 }, { "value": { "ref": "CRSCooperationModalityD01", "label": "donor country personnel" }, - "count": 8 + "count": 9 }, { "value": { @@ -3720,33 +3985,404 @@ "start_year": 1980, "end_year": 2025 }, - "constant_years": { - "start_year": 1960, - "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" + } + }, + "scope_choices": { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "base": { + "schema_version": 1, + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [], + "dropped_entries": [ + { + "entry": { + "axis": "sector", + "option_id": "sector:110", + "provenance": "explicit", + "origin": { + "kind": "text", + "text": "education", + "start": 0, + "end": 9 + } + }, + "code": "stated_choice_not_applied", + "cause": "option_unknown" + } + ], + "choices": [ + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:sector", + "axis": "sector", + "rule": "sector_code", + "provenance": "default", + "active": "sector:110+120+130", + "options": [ + { + "option_id": "sector:110+120+130", + "label": "education (CRS 110) + health (CRS 120) + population policy, programme, and reproductive health (CRS 130)", + "binding": { + "kind": "slot", + "slot": "crsPurpose", + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120", + "CRSPurposeCode130" + ] + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:gross", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:provider", + "axis": "provider", + "rule": "bilateral_flows", + "provenance": "default", + "active": "provider:bilateral", + "options": [ + { + "option_id": "provider:bilateral", + "label": "bilateral flows only", + "binding": { + "kind": "provider", + "scope": "bilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "provider:inclusive", + "label": "bilateral plus imputed multilateral, 2011 to 2024", + "binding": { + "kind": "provider", + "scope": "inclusive", + "window": [ + 2011, + 2024 + ], + "provenance": "provenance/ONEBilateralAndImputedMultilateral" + }, + "availability": { + "status": "partial", + "years": [ + [ + 2011, + 2024 + ] + ], + "code": "imputed_coverage", + "detail": {} + } + } + ] + } + ], + "compiled": { + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + ] }, - "base_year_min": 1980, - "base_year_max": 2025 + "requested_window": { + "kind": "all" + } }, - { - "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" - } + "components": [ + { + "role": "whole", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + } + } + ] + }, + "ledger": [] } } } @@ -3761,30 +4397,30 @@ } ], "timing_ms": { - "total": 4561, + "total": 5452, "by_step": { - "recall": 1310, + "recall": 2999, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 117, - "shape_probe_coverage": 28, - "shape_probe": 126, - "shape_groups": 83, + "shape_arcs": 1, + "shape_probe_coverage": 46, + "shape_probe": 144, + "shape_groups": 96, "shape_labels": 12, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 753, + "shape": 450, "phase_prune_and_rank": 0, - "bind": 309, - "phase_bind": 209, - "phase_settle": 82, + "bind": 646, + "phase_bind": 157, + "phase_settle": 101, "phase_place_bindings": 25, "phase_facet_requests": 0, - "materialise": 1061, - "phase_materialise": 233, - "answer": 29, - "options": 385, - "phase_outcome": 165 + "materialise": 602, + "phase_materialise": 196, + "answer": 45, + "options": 138, + "phase_outcome": 93 } }, "restatement": { @@ -3821,10 +4457,10 @@ "assumptions": [], "status": "definite", "spec": { - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "definition": { "schema_version": 1, - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "identity": { "identity_version": "spec1", "shape": { @@ -3847,7 +4483,8 @@ "state": "set", "refs": [ "CRSPurposeCode110", - "CRSPurposeCode120" + "CRSPurposeCode120", + "CRSPurposeCode130" ] } }, @@ -3895,7 +4532,7 @@ "resolved": { "shape": { "shape_id": "financialflow_amount_measuredvalue_nominal", - "label": "gross disbursements (official development assistance)", + "label": "gross disbursements (education, health and population policy, programme, and reproductive health, official development assistance)", "population_type": { "ref": "FinancialFlow", "label": "financial flow" @@ -3922,7 +4559,221 @@ }, "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": 634, + "member_digest": "5c91c0a8d90f4619a1ff7122cacdc8b0bc48b22c70516d7673aec42caf6da0d4", + "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": "set", + "values": [ + { + "ref": { + "ref": "CRSPurposeCode110", + "label": "education" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive 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" + }, + { + "ref": "CRSPurposeCode13010", + "label": "population policy and administrative management" + }, + { + "ref": "CRSPurposeCode13020", + "label": "reproductive health care" + }, + { + "ref": "CRSPurposeCode13030", + "label": "family planning" + }, + { + "ref": "CRSPurposeCode13040", + "label": "sexually transmitted disease control" + }, + { + "ref": "CRSPurposeCode13081", + "label": "personnel development for population and reproductive health" + } + ] + }, + "summable": true + }, + { + "key": { "axis": "how", "property": { "ref": "crsTypeOfFinance", @@ -3930,7 +4781,13 @@ }, "label": "instrument" }, - { + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { "axis": "how", "property": { "ref": "crsTypeOfFlow", @@ -3938,7 +4795,20 @@ }, "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", @@ -3946,7 +4816,20 @@ }, "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", @@ -3954,7 +4837,20 @@ }, "label": "netting basis" }, - { + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { "axis": "how", "property": { "ref": "crsCooperationModality", @@ -3962,30 +4858,118 @@ }, "label": "modality" }, - { + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "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" - } - ], - "member_count": 545, - "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", - "refine_supported": true, - "data_commons": [ + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 123, + "member_count_exact": true, + "served_count": 634, + "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": [ { - "id": "dfo", - "label": "Development Finance Observatory" + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 19 + }, + { + "label": "variables", + "count": 66 } ] }, - "slots": [ + "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", @@ -3993,382 +4977,502 @@ "ref": "crsPurpose", "label": "CRS purpose" }, - "label": "sector" - }, - "binding": { - "kind": "set", - "values": [ - { + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode998", + "label": "unallocated and unspecified" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 76, + "served_rows": 74, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode99810", + "label": "sectors not specified" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode998", + "member_count": 255, + "served_rows": 71, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode99820", + "label": "non-sector allocable promotion of development awareness" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode998", + "member_count": 77, + "served_rows": 3, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode600", + "label": "action relating to debt" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 21, + "served_rows": 9, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode60020", + "label": "debt forgiveness" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode600", + "member_count": 75, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode60040", + "label": "rescheduling and refinancing" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode600", + "member_count": 54, + "served_rows": 5, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode100", + "label": "social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 13, + "served_rows": 1214, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode140", + "label": "water supply and sanitation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 10, + "served_rows": 275, + "served_rows_exact": true + }, + { + "value": { "ref": { "ref": "CRSPurposeCode110", "label": "education" }, "value_kind": "enum_value" }, - { + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 9, + "served_rows": 318, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode160", + "label": "other social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 7, + "served_rows": 102, + "served_rows_exact": true + }, + { + "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" + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 6, + "served_rows": 194, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12230", - "label": "basic health infrastructure" + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 5, + "served_rows": 81, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode150", + "label": "government and civil society" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12240", - "label": "basic nutrition" + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 4, + "served_rows": 244, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode200", + "label": "economic infrastructure and services" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12250", - "label": "infectious disease control" + "relation": "root", + "member_count": 13, + "served_rows": 286, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode240", + "label": "banking and financial services" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12261", - "label": "health education" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 16, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode220", + "label": "communication system and technology" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12262", - "label": "malaria control" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 13, + "served_rows": 23, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode250", + "label": "business environment and governance" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12263", - "label": "tuberculosis control" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 13, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode210", + "label": "transport and storage" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12264", - "label": "COVID-19 control" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 7, + "served_rows": 97, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode230", + "label": "energy" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12281", - "label": "health personnel development" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 7, + "served_rows": 106, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode300", + "label": "productive sector" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12310", - "label": "general noncommunicable disease control" + "relation": "root", + "member_count": 13, + "served_rows": 493, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode310", + "label": "agriculture, forestry and fishing" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12320", - "label": "tobacco use control" + "relation": "child", + "parent": "CRSPurposeCode300", + "member_count": 12, + "served_rows": 405, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode320", + "label": "industry, mining and construction" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12330", - "label": "control of harmful use of alcohol and drugs" + "relation": "child", + "parent": "CRSPurposeCode300", + "member_count": 9, + "served_rows": 66, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode331", + "label": "trade policies and regulations" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12340", - "label": "mental health and well-being promotion" + "relation": "child", + "parent": "CRSPurposeCode300", + "member_count": 7, + "served_rows": 22, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode400", + "label": "multisector" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12350", - "label": "other noncommunicable disease prevention and treatment" + "relation": "root", + "member_count": 7, + "served_rows": 206, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode430", + "label": "other multisector" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12382", - "label": "research for noncommunicable disease prevention and control" - } - ] - }, - "summable": true - }, - { - "key": { - "axis": "how", - "property": { - "ref": "crsTypeOfFinance", - "label": "CRS type of finance" + "relation": "child", + "parent": "CRSPurposeCode400", + "member_count": 10, + "served_rows": 162, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode410", + "label": "general environment protection" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode400", + "member_count": 7, + "served_rows": 44, + "served_rows_exact": true }, - "label": "instrument" - }, - "binding": { - "kind": "unbound" - }, - "summable": true - }, - { - "key": { - "axis": "how", - "property": { - "ref": "crsTypeOfFlow", - "label": "CRS type of flow" + { + "value": { + "ref": { + "ref": "CRSPurposeCode500", + "label": "commodity aid and general programme assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 5, + "served_rows": 70, + "served_rows_exact": true }, - "label": "flow" - }, - "binding": { - "kind": "value", - "value": { - "ref": { - "ref": "CRSTypeOfFlow10", - "label": "official development assistance" + { + "value": { + "ref": { + "ref": "CRSPurposeCode510", + "label": "budget support" + }, + "value_kind": "enum_value" }, - "value_kind": "enum_value" - } - }, - "summable": true - }, - { - "key": { - "axis": "how", - "property": { - "ref": "financialFlowType", - "label": "financial flow type" + "relation": "child", + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 10, + "served_rows_exact": true }, - "label": "financial flow type" - }, - "binding": { - "kind": "value", - "value": { - "ref": { - "ref": "Disbursement", - "label": "disbursement" + { + "value": { + "ref": { + "ref": "CRSPurposeCode520", + "label": "food assistance" + }, + "value_kind": "enum_value" }, - "value_kind": "enum_value" - } - }, - "summable": false - }, - { - "key": { - "axis": "how", - "property": { - "ref": "nettingBasis", - "label": "netting basis" + "relation": "child", + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 19, + "served_rows_exact": true }, - "label": "netting basis" - }, - "binding": { - "kind": "value", - "value": { - "ref": { - "ref": "Gross", - "label": "gross" + { + "value": { + "ref": { + "ref": "CRSPurposeCode530", + "label": "other commodity assistance" + }, + "value_kind": "enum_value" }, - "value_kind": "enum_value" - } - }, - "summable": false - }, - { - "key": { - "axis": "how", - "property": { - "ref": "crsCooperationModality", - "label": "CRS cooperation modality" + "relation": "child", + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 41, + "served_rows_exact": true }, - "label": "modality" - }, - "binding": { - "kind": "unbound" - }, - "summable": true - }, - { - "key": { - "axis": "where", - "label": "place" - }, - "binding": { - "kind": "value", - "value": { - "ref": { - "ref": "country/KEN", - "label": "Kenya" + { + "value": { + "ref": { + "ref": "CRSPurposeCode700", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" }, - "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": { - "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" + "relation": "root", + "member_count": 5, + "served_rows": 68, + "served_rows_exact": true }, - "label": "sector" - }, - "options": [ { "value": { "ref": { - "ref": "CRSPurposeCode121", - "label": "general health" + "ref": "CRSPurposeCode720", + "label": "emergency response" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", + "parent": "CRSPurposeCode700", "member_count": 6, - "served_rows": 82, + "served_rows": 46, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode122", - "label": "basic health" + "ref": "CRSPurposeCode730", + "label": "reconstruction and rehabilitation" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 4, - "served_rows": 108, + "parent": "CRSPurposeCode700", + "member_count": 3, + "served_rows": 14, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode123", - "label": "noncommunicable disease" + "ref": "CRSPurposeCode740", + "label": "disaster preparedness" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 3, - "served_rows": 4, + "parent": "CRSPurposeCode700", + "member_count": 0, + "served_rows": 8, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode100", - "label": "social infrastructure and services" + "ref": "CRSPurposeCode930", + "label": "support for refugees and asylum seekers in donor countries" }, "value_kind": "enum_value" }, - "relation": "parent", - "member_count": 13, - "served_rows": 1214, + "relation": "root", + "member_count": 3, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode93010", + "label": "general support for refugees and asylum seekers in donor countries" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode930", + "member_count": 57, + "served_rows": 6, "served_rows_exact": true }, { @@ -4451,7 +5555,7 @@ }, "relation": "root", "member_count": 0, - "served_rows": 501, + "served_rows": 582, "served_rows_exact": true }, { @@ -4464,8 +5568,8 @@ }, "relation": "child", "parent": "CRSTypeOfFinance100", - "member_count": 12672, - "served_rows": 501, + "member_count": 12745, + "served_rows": 582, "served_rows_exact": true }, { @@ -4518,8 +5622,8 @@ "value_kind": "enum_value" }, "relation": "root", - "member_count": 14098, - "served_rows": 512, + "member_count": 14146, + "served_rows": 593, "served_rows_exact": true } ], @@ -4546,7 +5650,7 @@ }, "relation": "root", "member_count": 0, - "served_rows": 104, + "served_rows": 118, "served_rows_exact": true }, { @@ -4559,8 +5663,8 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1606, - "served_rows": 21, + "member_count": 1614, + "served_rows": 25, "served_rows_exact": true }, { @@ -4573,8 +5677,8 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1331, - "served_rows": 83, + "member_count": 1337, + "served_rows": 93, "served_rows_exact": true }, { @@ -4587,7 +5691,7 @@ }, "relation": "root", "member_count": 0, - "served_rows": 136, + "served_rows": 173, "served_rows_exact": true }, { @@ -4600,8 +5704,8 @@ }, "relation": "child", "parent": "CRSCooperationModalityC", - "member_count": 7005, - "served_rows": 136, + "member_count": 7041, + "served_rows": 173, "served_rows_exact": true }, { @@ -4614,7 +5718,7 @@ }, "relation": "root", "member_count": 0, - "served_rows": 111, + "served_rows": 116, "served_rows_exact": true }, { @@ -4628,7 +5732,7 @@ "relation": "child", "parent": "CRSCooperationModalityD", "member_count": 1600, - "served_rows": 84, + "served_rows": 87, "served_rows_exact": true }, { @@ -4641,8 +5745,8 @@ }, "relation": "child", "parent": "CRSCooperationModalityD", - "member_count": 976, - "served_rows": 27, + "member_count": 980, + "served_rows": 29, "served_rows_exact": true }, { @@ -4726,7 +5830,7 @@ "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).", + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education, health, and population policy, programme, and reproductive health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", "sentence_plan": [ { "kind": "slot", @@ -4799,7 +5903,7 @@ }, { "kind": "slot", - "text": "education and health", + "text": "education, health, and population policy, programme, and reproductive health", "axis": "how", "segment": "heading", "property_dcid": "crsPurpose", @@ -4973,6 +6077,10 @@ { "ref": "CRSPurposeCode120", "label": "health" + }, + { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" } ], "provenance": "text_recognized" @@ -5128,226 +6236,13 @@ "selected": [] } ], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "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 - } - ], + "alternative_measures": [], "measure_label": "gross disbursements", "measure_label_axes": [ "populationType", @@ -5393,6 +6288,8 @@ } } ], + "concept_label": "education, health, and population policy, programme, and reproductive health", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsTypeOfFinance", @@ -5405,7 +6302,7 @@ "ref": "CRSTypeOfFinance110", "label": "standard grant" }, - "count": 105 + "count": 120 }, { "value": { @@ -5420,42 +6317,42 @@ "property": "crsCooperationModality", "varies": true, "distinct_count": 7, - "undeclared_count": 19, + "undeclared_count": 22, "values": [ { "value": { "ref": "CRSCooperationModalityC01", "label": "project-type intervention" }, - "count": 27 + "count": 30 }, { "value": { "ref": "CRSCooperationModalityB03", "label": "contribution to specific-purpose programme and fund managed by an international organisation" }, - "count": 21 + "count": 24 }, { "value": { - "ref": "CRSCooperationModalityD02", - "label": "other technical assistance" + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" }, - "count": 16 + "count": 18 }, { "value": { - "ref": "CRSCooperationModalityB01", - "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" }, - "count": 15 + "count": 18 }, { "value": { "ref": "CRSCooperationModalityD01", "label": "donor country personnel" }, - "count": 8 + "count": 9 }, { "value": { @@ -7423,25 +8320,396 @@ "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 + "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" + } + }, + "scope_choices": { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "base": { + "schema_version": 1, + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [], + "dropped_entries": [ + { + "entry": { + "axis": "sector", + "option_id": "sector:110", + "provenance": "explicit", + "origin": { + "kind": "text", + "text": "education", + "start": 0, + "end": 9 + } + }, + "code": "stated_choice_not_applied", + "cause": "option_unknown" + } + ], + "choices": [ + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:sector", + "axis": "sector", + "rule": "sector_code", + "provenance": "default", + "active": "sector:110+120+130", + "options": [ + { + "option_id": "sector:110+120+130", + "label": "education (CRS 110) + health (CRS 120) + population policy, programme, and reproductive health (CRS 130)", + "binding": { + "kind": "slot", + "slot": "crsPurpose", + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120", + "CRSPurposeCode130" + ] + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:gross", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:provider", + "axis": "provider", + "rule": "bilateral_flows", + "provenance": "default", + "active": "provider:bilateral", + "options": [ + { + "option_id": "provider:bilateral", + "label": "bilateral flows only", + "binding": { + "kind": "provider", + "scope": "bilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "provider:inclusive", + "label": "bilateral plus imputed multilateral, 2011 to 2024", + "binding": { + "kind": "provider", + "scope": "inclusive", + "window": [ + 2011, + 2024 + ], + "provenance": "provenance/ONEBilateralAndImputedMultilateral" + }, + "availability": { + "status": "partial", + "years": [ + [ + 2011, + 2024 + ] + ], + "code": "imputed_coverage", + "detail": {} + } + } + ] } ], - "default_base_year": 2024, - "role_currencies": { - "destination": "KES", - "origin": "EUR" - } + "compiled": { + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + }, + "components": [ + { + "role": "whole", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + } + } + ] + }, + "ledger": [] } } } @@ -7461,30 +8729,30 @@ } ], "timing_ms": { - "total": 2851, + "total": 5202, "by_step": { - "recall": 360, + "recall": 1145, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe_coverage": 2, - "shape_probe": 121, - "shape_groups": 841, - "shape_labels": 17, - "shape_admission": 4, + "shape_arcs": 5, + "shape_probe_coverage": 4, + "shape_probe": 1327, + "shape_groups": 85, + "shape_labels": 11, + "shape_admission": 2, "phase_derive_shapes": 0, - "shape": 1100, + "shape": 1663, "phase_prune_and_rank": 0, - "bind": 261, - "phase_bind": 16, - "phase_settle": 7, - "phase_place_bindings": 554, + "bind": 216, + "phase_bind": 39, + "phase_settle": 18, + "phase_place_bindings": 1429, "phase_facet_requests": 0, - "materialise": 96, - "phase_materialise": 17, - "answer": 239, - "options": 188, - "phase_outcome": 13 + "materialise": 147, + "phase_materialise": 19, + "answer": 102, + "options": 400, + "phase_outcome": 24 } }, "restatement": { @@ -8921,7 +10189,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -9454,7 +10722,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -9493,12 +10761,14 @@ "confidence": "high", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "IMF World Economic Outlook (WEO)" } } ], "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "World Development Indicators", "related_group": { "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", "label": "Economic Activity With Activity Source = Gross Domestic Production" @@ -9546,7 +10816,7 @@ } } ], - "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.", + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education, health, and population policy, programme, and reproductive 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", @@ -9619,7 +10889,7 @@ }, { "kind": "slot", - "text": "education and health", + "text": "education, health, and population policy, programme, and reproductive health", "axis": "how", "segment": "heading", "property_dcid": "crsPurpose", @@ -9953,10 +11223,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "definition": { "schema_version": 1, - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "identity": { "identity_version": "spec1", "shape": { @@ -9979,7 +11249,8 @@ "state": "set", "refs": [ "CRSPurposeCode110", - "CRSPurposeCode120" + "CRSPurposeCode120", + "CRSPurposeCode130" ] } }, @@ -10036,13 +11307,13 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "9b2918c16ee54353a38b2401d62c118a" + "x-dfo-trace-id": "557550d777fb412fa5e6e590fb30997c" }, "json": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "identity": { "shape": { "kind": "statvar_schema", @@ -10062,7 +11333,8 @@ "binding": { "refs": [ "CRSPurposeCode110", - "CRSPurposeCode120" + "CRSPurposeCode120", + "CRSPurposeCode130" ], "state": "set" }, @@ -10110,10 +11382,10 @@ } } }, - "content_version": "cv_d6ce435ea267b46680c94eae9423d420", - "prepared_at": "2026-10-20T15:55:47Z", + "content_version": "cv_b600e3429190c07d98f8d59720cde7ba", + "prepared_at": "2026-10-29T22:25:13Z", "coverage": { - "rows": 512, + "rows": 593, "dimensions": [ { "label": "financingProvider", @@ -10169,8 +11441,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1973-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -10181,8 +11453,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Exclude donor core contributions to multilaterals", @@ -10202,13 +11474,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -10254,21 +11536,21 @@ "end_year": 2024, "start_year": 1997 }, - "graph_revision": "dfo-dev-dc-datacommons-service-00259-rpx", + "graph_revision": "dfo-dev-dc-datacommons-service-00280-hww", "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-20T13:18:18Z", - "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-29T17:06:13Z", + "content_hash": "000e2f88c4c71cf9ae60911d71c97dbc43c13ccb291ef9ca3584d75157b97e9e", "graph_endpoint": "graph_release" }, "source_revisions": [ { "source": "provenance/OECDCreditorReportingSystem", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_1e6cd9546fac19e9", - "materialiser_build": "8408f1f95c622223f8fa6e9ba55826ee8e22a852", + "capability_version": "dset_9ab17ec0e311a676", + "materialiser_build": "822036e7baafeec121646d059962f75762f849db", "resolved_stat_vars": [ { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA01_CRSPurposeCode11330_Nominal", @@ -10502,6 +11784,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11110_Nominal", "roles": [ @@ -10774,6 +12096,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11110_Nominal", "roles": [ @@ -10958,6 +12320,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11110_Nominal", "roles": [ @@ -11151,7 +12553,47 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12263_Nominal", + "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" @@ -11159,7 +12601,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12264_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12340_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11167,7 +12609,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12281_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12350_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11175,7 +12617,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12310_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12382_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11183,7 +12625,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12320_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13010_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11191,7 +12633,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12330_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13020_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11199,7 +12641,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12340_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13030_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11207,7 +12649,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12350_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13040_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11215,7 +12657,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12382_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13081_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11462,6 +12904,38 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11110_Nominal", "roles": [ @@ -11734,6 +13208,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11110_Nominal", "roles": [ @@ -11958,6 +13472,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", "roles": [ @@ -12230,6 +13784,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 19 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 10 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11110_Nominal", "roles": [ @@ -12502,6 +14096,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11110_Nominal", "roles": [ @@ -12774,6 +14408,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11110_Nominal", "roles": [ @@ -12943,7 +14617,47 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12261_Nominal", + "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" @@ -12951,7 +14665,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12262_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12382_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12959,7 +14673,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12264_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13010_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12967,7 +14681,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12281_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13020_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12975,7 +14689,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12310_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13030_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12983,7 +14697,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12340_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13040_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12991,7 +14705,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12382_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13081_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -13318,6 +15032,30 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11110_Nominal", "roles": [ @@ -13454,6 +15192,38 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH02_CRSPurposeCode12191_Nominal", "roles": [ @@ -13462,6 +15232,22 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityJ01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityJ01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11110_Nominal", "roles": [ @@ -13646,6 +15432,46 @@ ], "observation_count": 6 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 13 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", "roles": [ @@ -13758,6 +15584,30 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11110_Nominal", "roles": [ @@ -13830,6 +15680,22 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11110_Nominal", "roles": [ @@ -13998,6 +15864,38 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB031_CRSPurposeCode12110_Nominal", "roles": [ @@ -14278,6 +16176,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", "roles": [ @@ -14454,6 +16392,38 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance422_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", "roles": [ @@ -14550,6 +16520,30 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSPurposeCode11110_Nominal", "roles": [ @@ -14631,12 +16625,12 @@ "observation_count": 0 } ], - "family_member_count": 545, - "family_member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "family_member_count": 634, + "family_member_digest": "5c91c0a8d90f4619a1ff7122cacdc8b0bc48b22c70516d7673aec42caf6da0d4", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", - "served_from": "head", - "confirmed_at": "2026-10-26T09:18:03.336477+00:00" + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:37:38.826442+00:00" }, "warnings": [], "diagnostics": [ @@ -14648,41 +16642,41 @@ ], "artifacts": [ { - "artifact_digest": "sha256:a189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8", + "artifact_digest": "sha256:228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2", "rendering": { "bundle": false, "format": "parquet", "layout": 4, "without_party_totals": true }, - "bytes": 16208, + "bytes": 17220, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-23T16:58:41.714148+00:00", + "created_at": "2026-10-29T22:25:13.591902+00:00", "tier": "working", - "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_7a02b6facd2dc17b5d0d7c35c11bf5d2/cv_b600e3429190c07d98f8d59720cde7ba/files/sha256:228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179", + "artifact_digest": "sha256:46ec27bbc997b14d9d27305b59ebea27b24147358398f60652b1383a4a3da043", "rendering": { "statistics": "series" }, - "bytes": 11612, + "bytes": 12381, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-20T15:55:47.734234+00:00", + "created_at": "2026-10-29T22:25:13.591902+00:00", "tier": "working", - "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179" + "url": "/api/datasets/spec_7a02b6facd2dc17b5d0d7c35c11bf5d2/cv_b600e3429190c07d98f8d59720cde7ba/files/sha256:46ec27bbc997b14d9d27305b59ebea27b24147358398f60652b1383a4a3da043" } ], - "series_count": 108, + "series_count": 123, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", "kind": "grain", "droppable": false, - "distinct": 108 + "distinct": 123 }, { "name": "financingProvider", @@ -14759,7 +16753,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -14771,7 +16766,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -14783,7 +16779,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -14795,7 +16792,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -14807,7 +16805,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -14819,7 +16818,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -14831,7 +16831,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -14843,7 +16844,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -14855,7 +16857,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -14867,7 +16870,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -14879,7 +16883,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -14891,7 +16896,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -14903,7 +16909,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -14915,7 +16922,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -14931,14 +16939,14 @@ "columns": "time_period", "state": "available", "width": 29, - "cells": 3132 + "cells": 3567 }, { "index": "time_period", "columns": "stat_var", "state": "available", - "width": 109, - "cells": 3052 + "width": 124, + "cells": 3472 } ], "groupby": { @@ -14959,10 +16967,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-19T15:55:47.734809Z" + "held_until": "2026-11-28T22:25:13.592229Z" } } } @@ -14970,21 +16978,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8" + "origin_path": "/api/datasets/spec_7a02b6facd2dc17b5d0d7c35c11bf5d2/cv_b600e3429190c07d98f8d59720cde7ba/files/sha256:228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b06362d84bb845e786735d92808b1b48" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2?X-Goog-Signature=redacted", + "x-dfo-trace-id": "ba92a42f29eb49f5bdb4cbdd7c047cb4" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -15071,7 +17079,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4e3b97d6e0814dc7ae89509dcb63b46b" + "x-dfo-trace-id": "39917f146e6b4935a6200e27d0cd672b" }, "json": { "schema_version": 1, @@ -15248,7 +17256,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:05.070107+00:00" + "confirmed_at": "2026-11-01T07:37:40.580774+00:00" }, "warnings": [], "diagnostics": [ @@ -15287,7 +17295,7 @@ ], "series_count": 2, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -15364,7 +17372,8 @@ "covered": 2 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "observationAbout", @@ -15376,7 +17385,8 @@ "covered": 2 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "observationAbout", @@ -15388,7 +17398,8 @@ "covered": 2 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "observationAbout", @@ -15400,7 +17411,8 @@ "covered": 2 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false } ], "long_layout_defaults": [ @@ -15441,7 +17453,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T15:55:49.978519Z" @@ -15459,7 +17471,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839?X-Goog-Signature=redacted", - "x-dfo-trace-id": "dd6c261d3d2e4566bdc4071ef3834710" + "x-dfo-trace-id": "d5e8dafe390347b39afb2f285e3ce682" } } }, @@ -15482,10 +17494,10 @@ "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.", + "sentence": "Germany's gross ODA disbursements to Kenya for education, health, and population policy, programme, and reproductive 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_7a02b6facd2dc17b5d0d7c35c11bf5d2", "spec_f8dea3052d1ef6ba5667628815d1a663" ], "gaps": [] @@ -15493,7 +17505,7 @@ }, { "dataset": { - "rows": 644, + "rows": 725, "columns": [ "part", "time_period", @@ -15528,8 +17540,8 @@ ], "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": "Germany's gross ODA disbursements to Kenya for education, health, and population policy, programme, and reproductive health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "rows": 593 }, { "part": "GDP", @@ -15540,9 +17552,9 @@ "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)." + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "content_version": "cv_b600e3429190c07d98f8d59720cde7ba", + "sentence": "Germany's gross ODA disbursements to Kenya for education, health, and population policy, programme, and reproductive health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." }, { "parts": [ 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 index e20fbd8..a504e7f 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:08Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:37:01Z" }, "call": [ { @@ -35,7 +35,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "bffd660858754e239446c0e2c32a7593" + "x-dfo-trace-id": "cd24811ee0094a8cb5d3ad0fce91ee17" }, "json": { "schema_version": 1, @@ -46,14 +46,15 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "bffd660858754e239446c0e2c32a7593", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "cd24811ee0094a8cb5d3ad0fce91ee17", "warnings": [], "timing_ms": { - "total": 389, + "total": 3351, "by_step": { - "coverage": 0, - "extract": 0, + "coverage": 1, + "extract": 1, + "exclusion_read": 0, "cache_lookup": 0 } }, @@ -72,30 +73,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 385, + "total": 3321, "by_step": { "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 20, - "shape_probe": 22, - "shape_groups": 6, - "shape_labels": 11, + "shape_arcs": 1, + "shape_probe_coverage": 110, + "shape_probe": 113, + "shape_groups": 22, + "shape_labels": 44, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 127, + "shape": 998, "phase_prune_and_rank": 0, - "bind": 102, - "phase_bind": 15, - "phase_settle": 6, - "phase_place_bindings": 13, + "bind": 474, + "phase_bind": 34, + "phase_settle": 9, + "phase_place_bindings": 904, "phase_facet_requests": 0, - "materialise": 11, - "phase_materialise": 37, - "answer": 3, - "options": 9, - "phase_outcome": 61 + "materialise": 317, + "phase_materialise": 68, + "answer": 118, + "options": 100, + "phase_outcome": 298 } }, "restatement": { @@ -570,7 +571,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -1288,7 +1289,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -1298,6 +1299,7 @@ "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "World Bank International Debt Statistics (IDS)", "unit_conversion": { "currencies": [ { @@ -3273,18 +3275,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 18, + "total": 758, "by_step": { - "recall": 0, + "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe": 2, - "shape_groups": 1, + "shape_arcs": 0, + "shape_probe": 52, + "shape_groups": 18, "shape_labels": 0, - "shape_admission": 0, + "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 18, + "shape": 757, "phase_prune_and_rank": 0 } }, @@ -3724,7 +3726,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "a6a95e93a4134cbca3ef315e6bb5c6fb" + "x-dfo-trace-id": "6e30427c5eee45e0a58fcf56c8ecdfee" }, "json": { "schema_version": 1, @@ -3960,11 +3962,11 @@ } ], "family_member_count": 65, - "family_member_digest": "ef0365e0d7395767fee6210ec02c809839d0e28516031bf225d2cef2acc5e6d5", + "family_member_digest": "b66541c53125ee32113e51b4f52a3a428043b5506e15f96277f37b89547fc1c4", "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261012T000033Z-84777283", - "served_from": "head", - "confirmed_at": "2026-10-26T09:17:55.468442+00:00" + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:37:22.576667+00:00" }, "warnings": [ { @@ -3994,7 +3996,7 @@ "created_at": "2026-10-23T16:58:25.889079+00:00", "tier": "working", "url": "/api/datasets/spec_78d04fefc3b3f1ef71acd622957e4995/cv_2c981b422e8f8bdf5dee6067837cff13/files/sha256:ab0bfec276a23aaefea6dbc3f1b57854ea520b3a7ae5feeade202f292446ed2c", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:8da8a5b081cc06acba677ac2c668e4bcafb796bf040bede5de00740acda9c9ee", @@ -4010,7 +4012,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -4087,7 +4089,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4099,7 +4102,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4111,7 +4115,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4123,7 +4128,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4135,7 +4141,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4147,7 +4154,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4159,7 +4167,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -4186,7 +4195,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": true } @@ -4203,7 +4212,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aab0bfec276a23aaefea6dbc3f1b57854ea520b3a7ae5feeade202f292446ed2c?X-Goog-Signature=redacted", - "x-dfo-trace-id": "a835d2fa775c43b181cc16faf6a63b45" + "x-dfo-trace-id": "84c07114ba074f60a408cfa7e808186a" } } }, 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 index b5cb905..e8c3460 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:08Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:36:36Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "86b361f85db44a29b3d711350962ca73" + "x-dfo-trace-id": "cf40b66c70a74f34af1ea479ba67e11f" }, "json": { "schema_version": 1, @@ -45,20 +45,21 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "86b361f85db44a29b3d711350962ca73", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "cf40b66c70a74f34af1ea479ba67e11f", "warnings": [], "timing_ms": { - "total": 456, + "total": 3122, "by_step": { "coverage": 0, - "extract": 0, - "cache_lookup": 0 + "extract": 921, + "exclusion_read": 781, + "cache_lookup": 1 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, + "input_tokens": 2786, + "output_tokens": 112, "cached_tokens": 0, "jev_input_tokens": 5250, "jev_output_tokens": 1104 @@ -71,30 +72,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 452, + "total": 2193, "by_step": { - "recall": 1, + "recall": 1640, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 2, - "shape_probe_coverage": 17, - "shape_probe": 101, - "shape_groups": 8, - "shape_labels": 14, + "shape_arcs": 4, + "shape_probe_coverage": 12, + "shape_probe": 98, + "shape_groups": 6, + "shape_labels": 11, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 225, + "shape": 232, "phase_prune_and_rank": 0, - "bind": 77, - "phase_bind": 17, - "phase_settle": 5, + "bind": 91, + "phase_bind": 19, + "phase_settle": 8, "phase_place_bindings": 14, "phase_facet_requests": 0, - "materialise": 11, - "phase_materialise": 23, - "answer": 2, - "options": 9, - "phase_outcome": 68 + "materialise": 13, + "phase_materialise": 31, + "answer": 3, + "options": 78, + "phase_outcome": 64 } }, "restatement": { @@ -569,7 +570,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -1287,7 +1288,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -1297,6 +1298,7 @@ "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "World Bank International Debt Statistics (IDS)", "unit_conversion": { "currencies": [ { @@ -3272,18 +3274,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 121, + "total": 1545, "by_step": { - "recall": 0, + "recall": 1436, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe": 96, + "shape_arcs": 3, + "shape_probe": 101, "shape_groups": 1, "shape_labels": 0, - "shape_admission": 0, + "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 121, + "shape": 109, "phase_prune_and_rank": 0 } }, @@ -3653,7 +3655,7 @@ "error": { "class": "IncompleteAnswerError", "code": "answer_incomplete", - "trace_id": "86b361f85db44a29b3d711350962ca73" + "trace_id": "cf40b66c70a74f34af1ea479ba67e11f" } } ] 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 index 29aeeb4..89bc406 100644 --- 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 @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "989481cf76744b4cbddf1aff890cda9c" + "x-dfo-trace-id": "96a2cbe778b34b8695d7cdf943243a76" }, "json": { "schema_version": 1, @@ -45,11 +45,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "989481cf76744b4cbddf1aff890cda9c", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "96a2cbe778b34b8695d7cdf943243a76", "warnings": [], "timing_ms": { - "total": 1, + "total": 2, "by_step": { "coverage": 0, "response_cache_layer1": 1 @@ -68,10 +68,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -121,7 +121,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", @@ -222,17 +224,17 @@ } ], "flagged_match": { - "spec_id": "spec_6b3a93b7bdf9a3dd1d4976a7e7eac4ee", + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069", "definition": { "schema_version": 1, - "spec_id": "spec_6b3a93b7bdf9a3dd1d4976a7e7eac4ee" + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069" } }, "alternate_match": { - "spec_id": "spec_6b3a93b7bdf9a3dd1d4976a7e7eac4ee", + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069", "definition": { "schema_version": 1, - "spec_id": "spec_6b3a93b7bdf9a3dd1d4976a7e7eac4ee" + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069" } } } @@ -307,7 +309,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "7cbd24b2c1a0457da3df6702b8caf3aa" + "x-dfo-trace-id": "2cab3a3cbf0149de99fb1c73aa2688f5" }, "json": { "schema_version": 1, @@ -316,11 +318,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "7cbd24b2c1a0457da3df6702b8caf3aa", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "2cab3a3cbf0149de99fb1c73aa2688f5", "warnings": [], "timing_ms": { - "total": 1050, + "total": 1127, "by_step": { "coverage": 0 } @@ -329,8 +331,8 @@ "input_tokens": 0, "output_tokens": 0, "cached_tokens": 0, - "jev_input_tokens": 7365, - "jev_output_tokens": 1646 + "jev_input_tokens": 7477, + "jev_output_tokens": 1674 }, "timed_out": false }, @@ -346,30 +348,30 @@ } ], "timing_ms": { - "total": 1045, + "total": 1121, "by_step": { "recall": 0, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 1, - "shape_probe_coverage": 10, - "shape_probe": 104, - "shape_groups": 56, + "shape_probe_coverage": 13, + "shape_probe": 241, + "shape_groups": 57, "shape_labels": 1, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 473, + "shape": 589, "phase_prune_and_rank": 0, - "bind": 105, - "phase_bind": 185, - "phase_settle": 8, - "phase_place_bindings": 77, + "bind": 115, + "phase_bind": 111, + "phase_settle": 5, + "phase_place_bindings": 79, "phase_facet_requests": 0, - "materialise": 17, - "phase_materialise": 5, - "answer": 9, - "options": 26, - "phase_outcome": 140 + "materialise": 19, + "phase_materialise": 6, + "answer": 10, + "options": 58, + "phase_outcome": 129 } }, "restatement": { @@ -409,10 +411,10 @@ "assumptions": [], "status": "definite", "spec": { - "spec_id": "spec_6b3a93b7bdf9a3dd1d4976a7e7eac4ee", + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069", "definition": { "schema_version": 1, - "spec_id": "spec_6b3a93b7bdf9a3dd1d4976a7e7eac4ee", + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069", "identity": { "identity_version": "spec1", "shape": { @@ -447,7 +449,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -469,7 +471,7 @@ "resolved": { "shape": { "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", - "label": "gross disbursements (official development assistance)", + "label": "net disbursements (official development assistance)", "population_type": { "ref": "FinancialFlow", "label": "financial flow" @@ -534,7 +536,7 @@ } ], "member_count": 1, - "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "refine_supported": true, "data_commons": [ { @@ -613,8 +615,8 @@ "kind": "value", "value": { "ref": { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" }, "value_kind": "enum_value" } @@ -773,7 +775,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -811,48 +813,8 @@ { "value": { "ref": { - "ref": "DAC2aAidType201", - "label": "ODA grant" - }, - "value_kind": "enum_value" - }, - "relation": "child", - "parent": "DAC2aAidType206", - "member_count": 1, - "served_rows": 1, - "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": 1, - "served_rows_exact": true - }, - { - "value": { - "ref": { - "ref": "DAC2aAidType213", - "label": "developmental food aid" - }, - "value_kind": "enum_value" - }, - "relation": "root", - "member_count": 1, - "served_rows": 1, - "served_rows_exact": true - }, - { - "value": { - "ref": { - "ref": "DAC2aAidType216", - "label": "humanitarian aid" + "ref": "DAC2aAidType250", + "label": "official development assistance excluding debt relief" }, "value_kind": "enum_value" }, @@ -901,7 +863,7 @@ "source": "observed" } ], - "rendered_sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance in 2018. Current US dollars · OECD DAC2a.", + "rendered_sentence": "Germany's net disbursements to Democratic Republic of the Congo for official development assistance in 2018. Current US dollars · OECD DAC2a.", "sentence_plan": [ { "kind": "slot", @@ -932,7 +894,7 @@ }, { "kind": "slot", - "text": "gross disbursements", + "text": "net disbursements", "axis": "what", "segment": "heading", "entity_refs": [], @@ -1170,8 +1132,8 @@ "binding_kind": "value", "refs": [ { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" } ], "provenance": "measure_elected" @@ -1227,7 +1189,7 @@ "start_year": 2018, "end_year": 2018 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -1235,108 +1197,8 @@ }, "confidence": "high", "available_at_place": true, - "alternative_measures": [ - { - "definition": { - "schema_version": 1, - "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069", - "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": "range", - "start_year": 2018, - "end_year": 2018 - } - } - }, - "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": 1, - "served_rows_exact": true - } - ], - "measure_label": "gross disbursements", + "alternative_measures": [], + "measure_label": "net disbursements", "measure_label_axes": [ "populationType", "measuredProperty", @@ -1376,11 +1238,13 @@ { "axis": "nettingBasis", "value": { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" } } ], + "concept_label": "official development assistance", + "published_tables": "OECD DAC2a", "unit_conversion": { "currencies": [ { @@ -3344,12 +3208,290 @@ "origin": "EUR" } }, + "scope_choices": { + "id": "spec_8435999aa7036a9ab5ff61e26cc18069", + "base": { + "schema_version": 1, + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069", + "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": "range", + "start_year": 2018, + "end_year": 2018 + } + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [], + "dropped_entries": [], + "choices": [ + { + "id": "spec_8435999aa7036a9ab5ff61e26cc18069:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:net", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "unavailable", + "code": "basis_not_published", + "detail": { + "dataset": "provenance/OECDDAC2A" + } + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "unavailable", + "code": "basis_not_published", + "detail": { + "dataset": "provenance/OECDDAC2A" + } + } + } + ] + }, + { + "id": "spec_8435999aa7036a9ab5ff61e26cc18069:provider", + "axis": "provider", + "rule": "bilateral_recipient_total", + "provenance": "default", + "active": "provider:bilateral", + "options": [ + { + "option_id": "provider:bilateral", + "label": "bilateral flows only", + "binding": { + "kind": "provider", + "scope": "bilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "provider:inclusive", + "label": "net bilateral plus imputed multilateral as published, by convention", + "binding": { + "kind": "provider", + "scope": "inclusive", + "provenance": "provenance/ONEDAC2aBilateralAndImputedMultilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + } + ], + "compiled": { + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069", + "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": "range", + "start_year": 2018, + "end_year": 2018 + } + }, + "components": [ + { + "role": "whole", + "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": "range", + "start_year": 2018, + "end_year": 2018 + } + } + } + ] + }, + "ledger": [] + }, "equivalent_readings": [ { - "spec_id": "spec_6b3a93b7bdf9a3dd1d4976a7e7eac4ee", + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069", "definition": { "schema_version": 1, - "spec_id": "spec_6b3a93b7bdf9a3dd1d4976a7e7eac4ee" + "spec_id": "spec_8435999aa7036a9ab5ff61e26cc18069" } } ] @@ -3357,7 +3499,7 @@ } } ], - "rendered_sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance in 2018. Current US dollars · OECD DAC2a.", + "rendered_sentence": "Germany's net disbursements to Democratic Republic of the Congo for official development assistance in 2018. Current US dollars · OECD DAC2a.", "sentence_plan": [ { "kind": "slot", @@ -3391,7 +3533,7 @@ }, { "kind": "slot", - "text": "gross disbursements", + "text": "net disbursements", "axis": "what", "segment": "heading", "entity_refs": [], @@ -3575,10 +3717,10 @@ "answer": { "kind": "resolution", "status": "definite", - "sentence": "Germany's gross disbursements to Democratic Republic of the Congo for official development assistance in 2018. Current US dollars · OECD DAC2a.", + "sentence": "Germany's net disbursements to Democratic Republic of the Congo for official development assistance in 2018. Current US dollars · OECD DAC2a.", "complete": true, "specs": [ - "spec_6b3a93b7bdf9a3dd1d4976a7e7eac4ee" + "spec_8435999aa7036a9ab5ff61e26cc18069" ], "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 index 8ca97a3..57e2d2f 100644 --- 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 @@ -33,7 +33,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c7cb40f3790f4a15a0ddcad0cc93c9bb" + "x-dfo-trace-id": "92a325e77a854c5daafa875164b5e23e" }, "json": { "schema_version": 1, @@ -41,23 +41,27 @@ "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": true + "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "c7cb40f3790f4a15a0ddcad0cc93c9bb", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "92a325e77a854c5daafa875164b5e23e", "warnings": [], "timing_ms": { - "total": 3, + "total": 17540, "by_step": { "coverage": 0, - "response_cache_layer1": 1 + "extract": 1239, + "exclusion_read": 719, + "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cached_tokens": 0 + "input_tokens": 2784, + "output_tokens": 111, + "cached_tokens": 0, + "jev_input_tokens": 6695, + "jev_output_tokens": 2088 }, "timed_out": false }, @@ -67,30 +71,30 @@ "variable_text": "ODA disbursements for basic health care", "warnings": [], "timing_ms": { - "total": 3011, + "total": 16265, "by_step": { - "recall": 457, + "recall": 2821, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 2, - "shape_probe_coverage": 8, - "shape_probe": 114, - "shape_groups": 579, + "shape_probe_coverage": 104, + "shape_probe": 352, + "shape_groups": 109, "shape_labels": 1, - "shape_admission": 2, + "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 1247, + "shape": 1134, "phase_prune_and_rank": 0, - "bind": 266, - "phase_bind": 327, - "phase_settle": 46, - "phase_place_bindings": 57, + "bind": 5473, + "phase_bind": 345, + "phase_settle": 105, + "phase_place_bindings": 1078, "phase_facet_requests": 0, - "materialise": 44, - "phase_materialise": 200, - "answer": 220, - "options": 55, - "phase_outcome": 92 + "materialise": 2132, + "phase_materialise": 313, + "answer": 1829, + "options": 872, + "phase_outcome": 163 } }, "restatement": { @@ -541,7 +545,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -599,7 +603,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1606, + "member_count": 1614, "served_rows": 1, "served_rows_exact": true }, @@ -613,7 +617,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1331, + "member_count": 1337, "served_rows": 6, "served_rows_exact": true }, @@ -640,7 +644,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityC", - "member_count": 7005, + "member_count": 7041, "served_rows": 7, "served_rows_exact": true }, @@ -736,7 +740,7 @@ }, "relation": "child", "parent": "CRSTypeOfFinance100", - "member_count": 12672, + "member_count": 12745, "served_rows": 30, "served_rows_exact": true } @@ -763,7 +767,7 @@ "value_kind": "enum_value" }, "relation": "root", - "member_count": 14098, + "member_count": 14146, "served_rows": 30, "served_rows_exact": true } @@ -1194,7 +1198,7 @@ "selected": [] } ], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -1202,214 +1206,7 @@ }, "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 - } - ], + "alternative_measures": [], "measure_label": "gross disbursements", "measure_label_axes": [ "populationType", @@ -1455,6 +1252,8 @@ } } ], + "concept_label": "basic health care", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsTypeOfFinance", @@ -3480,6 +3279,363 @@ "destination": "NGN", "origin": "EUR" } + }, + "scope_choices": { + "id": "spec_774d6c001a6250aa67ca676ab067895e", + "base": { + "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" + } + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [ + { + "axis": "sector", + "option_id": "sector:12220", + "provenance": "explicit", + "origin": { + "kind": "text", + "text": "basic health care", + "start": 46, + "end": 63 + } + } + ], + "dropped_entries": [], + "choices": [ + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:sector", + "axis": "sector", + "rule": "sector_code", + "provenance": "explicit", + "active": "sector:12220", + "options": [ + { + "option_id": "sector:12220", + "label": "basic health care (CRS 12220)", + "binding": { + "kind": "slot", + "slot": "crsPurpose", + "state": "value", + "refs": [ + "CRSPurposeCode12220" + ] + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:gross", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:provider", + "axis": "provider", + "rule": "bilateral_flows", + "provenance": "default", + "active": "provider:bilateral", + "options": [ + { + "option_id": "provider:bilateral", + "label": "bilateral flows only", + "binding": { + "kind": "provider", + "scope": "bilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "provider:inclusive", + "label": "bilateral plus imputed multilateral, 2020 to 2024", + "binding": { + "kind": "provider", + "scope": "inclusive", + "window": [ + 2020, + 2024 + ], + "provenance": "provenance/ONEBilateralAndImputedMultilateral" + }, + "availability": { + "status": "partial", + "years": [ + [ + 2011, + 2016 + ], + [ + 2020, + 2024 + ] + ], + "code": "imputed_coverage", + "detail": {} + } + } + ] + } + ], + "compiled": { + "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" + } + }, + "components": [ + { + "role": "whole", + "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" + } + } + } + ] + }, + "ledger": [] } } } @@ -3793,7 +3949,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4c3f35c8c0d44b99941a73a9519b41d2" + "x-dfo-trace-id": "fff69a3d23f5431c8a34da1b72c9e034" }, "json": { "schema_version": 1, @@ -4193,8 +4349,8 @@ "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", - "served_from": "head", - "confirmed_at": "2026-10-26T09:17:22.037029+00:00" + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:35:51.549820+00:00" }, "warnings": [ { @@ -4224,7 +4380,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -4240,7 +4396,7 @@ ], "series_count": 5, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -4323,7 +4479,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -4335,7 +4492,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -4347,7 +4505,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -4359,7 +4518,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -4371,7 +4531,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -4383,7 +4544,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -4395,7 +4557,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4407,7 +4570,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4419,7 +4583,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4431,7 +4596,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4443,7 +4609,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4455,7 +4622,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4467,7 +4635,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4479,7 +4648,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -4523,7 +4693,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": true } @@ -4540,7 +4710,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "333ab72de55449ed8288a5f458406a4c" + "x-dfo-trace-id": "815c18c3e59945d6ade9f99db58f2960" } } }, 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 index 7f3c983..9e58845 100644 --- 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 @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "86b361f85db44a29b3d711350962ca73" + "x-dfo-trace-id": "cf40b66c70a74f34af1ea479ba67e11f" }, "json": { "schema_version": 1, @@ -41,20 +41,21 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "86b361f85db44a29b3d711350962ca73", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "cf40b66c70a74f34af1ea479ba67e11f", "warnings": [], "timing_ms": { - "total": 456, + "total": 3122, "by_step": { "coverage": 0, - "extract": 0, - "cache_lookup": 0 + "extract": 921, + "exclusion_read": 781, + "cache_lookup": 1 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, + "input_tokens": 2786, + "output_tokens": 112, "cached_tokens": 0, "jev_input_tokens": 5250, "jev_output_tokens": 1104 @@ -67,30 +68,30 @@ "variable_text": "debt service", "warnings": [], "timing_ms": { - "total": 452, + "total": 2193, "by_step": { - "recall": 1, + "recall": 1640, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 2, - "shape_probe_coverage": 17, - "shape_probe": 101, - "shape_groups": 8, - "shape_labels": 14, + "shape_arcs": 4, + "shape_probe_coverage": 12, + "shape_probe": 98, + "shape_groups": 6, + "shape_labels": 11, "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 225, + "shape": 232, "phase_prune_and_rank": 0, - "bind": 77, - "phase_bind": 17, - "phase_settle": 5, + "bind": 91, + "phase_bind": 19, + "phase_settle": 8, "phase_place_bindings": 14, "phase_facet_requests": 0, - "materialise": 11, - "phase_materialise": 23, - "answer": 2, - "options": 9, - "phase_outcome": 68 + "materialise": 13, + "phase_materialise": 31, + "answer": 3, + "options": 78, + "phase_outcome": 64 } }, "restatement": { @@ -565,7 +566,7 @@ "label": "Creative Commons Attribution License" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -1283,7 +1284,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -1293,6 +1294,7 @@ "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "World Bank International Debt Statistics (IDS)", "unit_conversion": { "currencies": [ { @@ -3268,18 +3270,18 @@ "variable_text": "price of tea", "warnings": [], "timing_ms": { - "total": 121, + "total": 1545, "by_step": { - "recall": 0, + "recall": 1436, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 1, - "shape_probe": 96, + "shape_arcs": 3, + "shape_probe": 101, "shape_groups": 1, "shape_labels": 0, - "shape_admission": 0, + "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 121, + "shape": 109, "phase_prune_and_rank": 0 } }, @@ -3631,7 +3633,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "86b361f85db44a29b3d711350962ca73" + "trace_id": "cf40b66c70a74f34af1ea479ba67e11f" } } ] 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 index 66e1e7f..67e6d20 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:10Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:37:26Z" }, "call": [ { @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "5e0f0d6a5a6442a38932b02d7f72ed6c" + "x-dfo-trace-id": "c58dd2d53f1d4340a3f1fcb4c72681c5" }, "json": { "schema_version": 1, @@ -42,23 +42,27 @@ "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": true + "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "5e0f0d6a5a6442a38932b02d7f72ed6c", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "c58dd2d53f1d4340a3f1fcb4c72681c5", "warnings": [], "timing_ms": { - "total": 8, + "total": 6877, "by_step": { "coverage": 0, - "response_cache_layer1": 1 + "extract": 1225, + "exclusion_read": 636, + "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cached_tokens": 0 + "input_tokens": 2796, + "output_tokens": 224, + "cached_tokens": 0, + "jev_input_tokens": 25826, + "jev_output_tokens": 5796 }, "timed_out": false }, @@ -68,30 +72,30 @@ "variable_text": "health ODA disbursements", "warnings": [], "timing_ms": { - "total": 4401, + "total": 4245, "by_step": { - "recall": 1271, + "recall": 1975, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 108, - "shape_probe_coverage": 4, - "shape_probe": 113, - "shape_groups": 72, - "shape_labels": 12, - "shape_admission": 0, + "shape_arcs": 1, + "shape_probe_coverage": 5, + "shape_probe": 116, + "shape_groups": 62, + "shape_labels": 11, + "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 524, + "shape": 280, "phase_prune_and_rank": 0, - "bind": 482, - "phase_bind": 205, - "phase_settle": 57, - "phase_place_bindings": 34, + "bind": 227, + "phase_bind": 195, + "phase_settle": 82, + "phase_place_bindings": 31, "phase_facet_requests": 0, - "materialise": 686, - "phase_materialise": 225, - "answer": 28, - "options": 685, - "phase_outcome": 204 + "materialise": 858, + "phase_materialise": 171, + "answer": 78, + "options": 214, + "phase_outcome": 134 } }, "restatement": { @@ -128,10 +132,10 @@ "assumptions": [], "status": "definite", "spec": { - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "definition": { "schema_version": 1, - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "identity": { "identity_version": "spec1", "shape": { @@ -154,7 +158,8 @@ "state": "set", "refs": [ "CRSPurposeCode110", - "CRSPurposeCode120" + "CRSPurposeCode120", + "CRSPurposeCode130" ] } }, @@ -202,7 +207,7 @@ "resolved": { "shape": { "shape_id": "financialflow_amount_measuredvalue_nominal", - "label": "gross disbursements (official development assistance)", + "label": "gross disbursements (education, health and population policy, programme, and reproductive health, official development assistance)", "population_type": { "ref": "FinancialFlow", "label": "financial flow" @@ -282,8 +287,8 @@ "label": "data source" } ], - "member_count": 545, - "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "member_count": 634, + "member_digest": "5c91c0a8d90f4619a1ff7122cacdc8b0bc48b22c70516d7673aec42caf6da0d4", "refine_supported": true, "data_commons": [ { @@ -318,6 +323,13 @@ "label": "health" }, "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" + }, + "value_kind": "enum_value" } ] }, @@ -410,6 +422,26 @@ { "ref": "CRSPurposeCode12382", "label": "research for noncommunicable disease prevention and control" + }, + { + "ref": "CRSPurposeCode13010", + "label": "population policy and administrative management" + }, + { + "ref": "CRSPurposeCode13020", + "label": "reproductive health care" + }, + { + "ref": "CRSPurposeCode13030", + "label": "family planning" + }, + { + "ref": "CRSPurposeCode13040", + "label": "sexually transmitted disease control" + }, + { + "ref": "CRSPurposeCode13081", + "label": "personnel development for population and reproductive health" } ] }, @@ -549,9 +581,9 @@ ], "unresolved_slots": [], "stat_vars": { - "member_count": 108, + "member_count": 123, "member_count_exact": true, - "served_count": 545, + "served_count": 634, "data_date_range": { "start": "1997", "end": "2024" @@ -581,15 +613,21 @@ }, { "label": "observations", - "count": 12 + "count": 19 }, { "label": "variables", - "count": 51 + "count": 66 } ] }, "facets": { + "unit": { + "basis": "fallback", + "ref": "CurrencyUSD", + "label": "US Dollar", + "currency": "USD" + }, "provenance": { "basis": "fallback", "ref": "provenance/OECDCreditorReportingSystem", @@ -604,12 +642,6 @@ }, "documentation": "/api/graph/documentation/provenance/OECDCreditorReportingSystem", "account": "provider" - }, - "unit": { - "basis": "fallback", - "ref": "CurrencyUSD", - "label": "US Dollar", - "currency": "USD" } }, "slot_options": [ @@ -626,45 +658,85 @@ { "value": { "ref": { - "ref": "CRSPurposeCode121", - "label": "general health" + "ref": "CRSPurposeCode998", + "label": "unallocated and unspecified" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 76, + "served_rows": 74, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode99810", + "label": "sectors not specified" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 6, - "served_rows": 82, + "parent": "CRSPurposeCode998", + "member_count": 255, + "served_rows": 71, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode122", - "label": "basic health" + "ref": "CRSPurposeCode99820", + "label": "non-sector allocable promotion of development awareness" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 4, - "served_rows": 108, + "parent": "CRSPurposeCode998", + "member_count": 77, + "served_rows": 3, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode600", + "label": "action relating to debt" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 21, + "served_rows": 9, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode123", - "label": "noncommunicable disease" + "ref": "CRSPurposeCode60020", + "label": "debt forgiveness" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 3, + "parent": "CRSPurposeCode600", + "member_count": 75, "served_rows": 4, "served_rows_exact": true }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode60040", + "label": "rescheduling and refinancing" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode600", + "member_count": 54, + "served_rows": 5, + "served_rows_exact": true + }, { "value": { "ref": { @@ -673,7 +745,7 @@ }, "value_kind": "enum_value" }, - "relation": "parent", + "relation": "root", "member_count": 13, "served_rows": 1214, "served_rows_exact": true @@ -681,360 +753,760 @@ { "value": { "ref": { - "ref": "CRSPurposeCode111", - "label": "unspecified-level education" + "ref": "CRSPurposeCode140", + "label": "water supply and sanitation" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode110", - "member_count": 6, - "served_rows": 78, + "parent": "CRSPurposeCode100", + "member_count": 10, + "served_rows": 275, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode112", - "label": "basic education" + "ref": "CRSPurposeCode110", + "label": "education" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode110", + "parent": "CRSPurposeCode100", + "member_count": 9, + "served_rows": 318, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode160", + "label": "other social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 7, + "served_rows": 102, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode100", "member_count": 6, - "served_rows": 77, + "served_rows": 194, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode113", - "label": "upper secondary education" + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode110", + "parent": "CRSPurposeCode100", "member_count": 5, - "served_rows": 69, + "served_rows": 81, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode114", - "label": "post-secondary education" + "ref": "CRSPurposeCode150", + "label": "government and civil society" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode110", + "parent": "CRSPurposeCode100", "member_count": 4, - "served_rows": 94, + "served_rows": 244, "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" + "ref": "CRSPurposeCode200", + "label": "economic infrastructure and services" }, "value_kind": "enum_value" }, "relation": "root", - "member_count": 0, - "served_rows": 501, + "member_count": 13, + "served_rows": 286, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSTypeOfFinance110", - "label": "standard grant" + "ref": "CRSPurposeCode240", + "label": "banking and financial services" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSTypeOfFinance100", - "member_count": 12672, - "served_rows": 501, + "parent": "CRSPurposeCode200", + "member_count": 16, + "served_rows": 30, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSTypeOfFinance420", - "label": "debt instrument" + "ref": "CRSPurposeCode220", + "label": "communication system and technology" }, "value_kind": "enum_value" }, - "relation": "root", - "member_count": 0, - "served_rows": 11, + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 13, + "served_rows": 23, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSTypeOfFinance421", - "label": "standard loan" + "ref": "CRSPurposeCode250", + "label": "business environment and governance" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSTypeOfFinance420", - "member_count": 4620, - "served_rows": 11, + "parent": "CRSPurposeCode200", + "member_count": 13, + "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" + "ref": "CRSPurposeCode210", + "label": "transport and storage" }, "value_kind": "enum_value" }, - "relation": "root", - "member_count": 14098, - "served_rows": 512, + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 7, + "served_rows": 97, "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" + "ref": "CRSPurposeCode230", + "label": "energy" }, "value_kind": "enum_value" }, - "relation": "root", - "member_count": 0, - "served_rows": 104, + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 7, + "served_rows": 106, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityB03", - "label": "contribution to specific-purpose programme and fund managed by an international organisation" + "ref": "CRSPurposeCode300", + "label": "productive sector" }, "value_kind": "enum_value" }, - "relation": "child", - "parent": "CRSCooperationModalityB", - "member_count": 1606, - "served_rows": 21, + "relation": "root", + "member_count": 13, + "served_rows": 493, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityB01", - "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + "ref": "CRSPurposeCode310", + "label": "agriculture, forestry and fishing" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityB", - "member_count": 1331, - "served_rows": 83, + "parent": "CRSPurposeCode300", + "member_count": 12, + "served_rows": 405, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityC", - "label": "project-type intervention (group)" + "ref": "CRSPurposeCode320", + "label": "industry, mining and construction" }, "value_kind": "enum_value" }, - "relation": "root", - "member_count": 0, - "served_rows": 136, + "relation": "child", + "parent": "CRSPurposeCode300", + "member_count": 9, + "served_rows": 66, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityC01", - "label": "project-type intervention" + "ref": "CRSPurposeCode331", + "label": "trade policies and regulations" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityC", - "member_count": 7005, - "served_rows": 136, + "parent": "CRSPurposeCode300", + "member_count": 7, + "served_rows": 22, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityD", - "label": "expert and other technical assistance" + "ref": "CRSPurposeCode400", + "label": "multisector" }, "value_kind": "enum_value" }, "relation": "root", - "member_count": 0, - "served_rows": 111, + "member_count": 7, + "served_rows": 206, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityD02", - "label": "other technical assistance" + "ref": "CRSPurposeCode430", + "label": "other multisector" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityD", - "member_count": 1600, - "served_rows": 84, + "parent": "CRSPurposeCode400", + "member_count": 10, + "served_rows": 162, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityD01", - "label": "donor country personnel" + "ref": "CRSPurposeCode410", + "label": "general environment protection" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityD", - "member_count": 976, - "served_rows": 27, + "parent": "CRSPurposeCode400", + "member_count": 7, + "served_rows": 44, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityE", - "label": "scholarship and student cost in donor country" + "ref": "CRSPurposeCode500", + "label": "commodity aid and general programme assistance" }, "value_kind": "enum_value" }, "relation": "root", - "member_count": 0, - "served_rows": 38, + "member_count": 5, + "served_rows": 70, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityE01", - "label": "scholarship and training in donor country" + "ref": "CRSPurposeCode510", + "label": "budget support" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityE", - "member_count": 819, - "served_rows": 19, + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 10, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSCooperationModalityE02", - "label": "imputed student cost" + "ref": "CRSPurposeCode520", + "label": "food assistance" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSCooperationModalityE", - "member_count": 315, + "parent": "CRSPurposeCode500", + "member_count": 3, "served_rows": 19, "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)" + "ref": "CRSPurposeCode530", + "label": "other commodity assistance" }, - "value_kind": "source" - } - } - ], - "truncated": false, - "source": "observed" - }, - { - "axis": "unit", - "options": [ + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 41, + "served_rows_exact": true + }, { "value": { "ref": { - "ref": "CurrencyUSD", - "label": "US Dollar" + "ref": "CRSPurposeCode700", + "label": "humanitarian aid" }, "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": [ + }, + "relation": "root", + "member_count": 5, + "served_rows": 68, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode720", + "label": "emergency response" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode700", + "member_count": 6, + "served_rows": 46, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode730", + "label": "reconstruction and rehabilitation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode700", + "member_count": 3, + "served_rows": 14, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode740", + "label": "disaster preparedness" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode700", + "member_count": 0, + "served_rows": 8, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode930", + "label": "support for refugees and asylum seekers in donor countries" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 3, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode93010", + "label": "general support for refugees and asylum seekers in donor countries" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode930", + "member_count": 57, + "served_rows": 6, + "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": 582, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSTypeOfFinance110", + "label": "standard grant" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSTypeOfFinance100", + "member_count": 12745, + "served_rows": 582, + "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": 14146, + "served_rows": 593, + "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": 118, + "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": 1614, + "served_rows": 25, + "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": 1337, + "served_rows": 93, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC", + "label": "project-type intervention (group)" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 0, + "served_rows": 173, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityC01", + "label": "project-type intervention" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityC", + "member_count": 7041, + "served_rows": 173, + "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": 116, + "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": 87, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSCooperationModalityD01", + "label": "donor country personnel" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSCooperationModalityD", + "member_count": 980, + "served_rows": 29, + "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" + } + ], + "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, health, and population policy, programme, and reproductive health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", + "sentence_plan": [ { "kind": "slot", "text": "Germany", @@ -1106,7 +1578,7 @@ }, { "kind": "slot", - "text": "education and health", + "text": "education, health, and population policy, programme, and reproductive health", "axis": "how", "segment": "heading", "property_dcid": "crsPurpose", @@ -1280,6 +1752,10 @@ { "ref": "CRSPurposeCode120", "label": "health" + }, + { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" } ], "provenance": "text_recognized" @@ -1317,344 +1793,131 @@ }, { "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/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": "health", - "named": [ - { - "ref": "CRSPurposeCode120", - "label": "health" - } - ], - "slot": "crsPurpose", - "disposition": "bound", - "selected": [] - }, - { - "text": "ODA", - "named": [ - { - "ref": "CRSTypeOfFlow10", - "label": "official development assistance" - } - ], - "slot": "crsTypeOfFlow", - "disposition": "bound", - "selected": [] - }, - { - "text": "education", - "named": [ - { - "ref": "CRSPurposeCode110", - "label": "education" - } - ], - "slot": "crsPurpose", - "disposition": "bound", - "selected": [] - } - ], - "capability_version": "cap_765c9d2a0c7529b9", - "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" - ] + "axis": "how", + "property": { + "ref": "financialFlowType", + "label": "financial flow type" }, - "requested_window": { - "kind": "all" + "label": "financial flow type" + }, + "binding_kind": "value", + "refs": [ + { + "ref": "Disbursement", + "label": "disbursement" } - } + ], + "provenance": "text_recognized" }, - "label": "commitments", - "axis": "what", - "measure_axis_values": [ - { - "axis": "populationType", - "value": { - "ref": "FinancialObligation", - "label": "financial obligation" - } + { + "key": { + "axis": "how", + "property": { + "ref": "nettingBasis", + "label": "netting basis" + }, + "label": "netting basis" }, - { - "axis": "measuredProperty", - "value": { - "ref": "amount", - "label": "amount" + "binding_kind": "value", + "refs": [ + { + "ref": "Gross", + "label": "gross" } + ], + "provenance": "measure_elected" + }, + { + "key": { + "axis": "how", + "property": { + "ref": "crsCooperationModality", + "label": "CRS cooperation modality" + }, + "label": "modality" }, - { - "axis": "measurementQualifier", - "value": { - "ref": "Nominal", - "label": "nominal" + "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" }, - { - "axis": "financialObligationType", - "value": { - "ref": "Commitment", - "label": "commitment" + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + }, + { + "key": { + "axis": "source", + "label": "data source" + }, + "binding_kind": "unbound", + "refs": [], + "provenance": "binder" + } + ], + "query_qualifiers": [ + { + "text": "health", + "named": [ + { + "ref": "CRSPurposeCode120", + "label": "health" } - } - ], - "served_rows": 519, - "served_rows_exact": true + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + }, + { + "text": "ODA", + "named": [ + { + "ref": "CRSTypeOfFlow10", + "label": "official development assistance" + } + ], + "slot": "crsTypeOfFlow", + "disposition": "bound", + "selected": [] + }, + { + "text": "education", + "named": [ + { + "ref": "CRSPurposeCode110", + "label": "education" + } + ], + "slot": "crsPurpose", + "disposition": "bound", + "selected": [] + } + ], + "capability_version": "cap_4913302d7a6b6435", + "default_reading": { + "applied": true, + "removed_stat_vars": [] } - ], + }, + "alternative_measures": [], "measure_label": "gross disbursements", "measure_label_axes": [ "populationType", @@ -1700,6 +1963,8 @@ } } ], + "concept_label": "education, health, and population policy, programme, and reproductive health", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsTypeOfFinance", @@ -1712,7 +1977,7 @@ "ref": "CRSTypeOfFinance110", "label": "standard grant" }, - "count": 105 + "count": 120 }, { "value": { @@ -1727,42 +1992,42 @@ "property": "crsCooperationModality", "varies": true, "distinct_count": 7, - "undeclared_count": 19, + "undeclared_count": 22, "values": [ { "value": { "ref": "CRSCooperationModalityC01", "label": "project-type intervention" }, - "count": 27 + "count": 30 }, { "value": { "ref": "CRSCooperationModalityB03", "label": "contribution to specific-purpose programme and fund managed by an international organisation" }, - "count": 21 + "count": 24 }, { "value": { - "ref": "CRSCooperationModalityD02", - "label": "other technical assistance" + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" }, - "count": 16 + "count": 18 }, { "value": { - "ref": "CRSCooperationModalityB01", - "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" }, - "count": 15 + "count": 18 }, { "value": { "ref": "CRSCooperationModalityD01", "label": "donor country personnel" }, - "count": 8 + "count": 9 }, { "value": { @@ -3722,33 +3987,404 @@ "start_year": 1980, "end_year": 2025 }, - "constant_years": { - "start_year": 1960, - "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" + } + }, + "scope_choices": { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "base": { + "schema_version": 1, + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [], + "dropped_entries": [ + { + "entry": { + "axis": "sector", + "option_id": "sector:110", + "provenance": "explicit", + "origin": { + "kind": "text", + "text": "education", + "start": 0, + "end": 9 + } + }, + "code": "stated_choice_not_applied", + "cause": "option_unknown" + } + ], + "choices": [ + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:sector", + "axis": "sector", + "rule": "sector_code", + "provenance": "default", + "active": "sector:110+120+130", + "options": [ + { + "option_id": "sector:110+120+130", + "label": "education (CRS 110) + health (CRS 120) + population policy, programme, and reproductive health (CRS 130)", + "binding": { + "kind": "slot", + "slot": "crsPurpose", + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120", + "CRSPurposeCode130" + ] + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:gross", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:provider", + "axis": "provider", + "rule": "bilateral_flows", + "provenance": "default", + "active": "provider:bilateral", + "options": [ + { + "option_id": "provider:bilateral", + "label": "bilateral flows only", + "binding": { + "kind": "provider", + "scope": "bilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "provider:inclusive", + "label": "bilateral plus imputed multilateral, 2011 to 2024", + "binding": { + "kind": "provider", + "scope": "inclusive", + "window": [ + 2011, + 2024 + ], + "provenance": "provenance/ONEBilateralAndImputedMultilateral" + }, + "availability": { + "status": "partial", + "years": [ + [ + 2011, + 2024 + ] + ], + "code": "imputed_coverage", + "detail": {} + } + } + ] + } + ], + "compiled": { + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + ] }, - "base_year_min": 1980, - "base_year_max": 2025 + "requested_window": { + "kind": "all" + } }, - { - "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" - } + "components": [ + { + "role": "whole", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + } + } + ] + }, + "ledger": [] } } } @@ -3763,30 +4399,30 @@ } ], "timing_ms": { - "total": 4561, + "total": 5452, "by_step": { - "recall": 1310, + "recall": 2999, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 117, - "shape_probe_coverage": 28, - "shape_probe": 126, - "shape_groups": 83, + "shape_arcs": 1, + "shape_probe_coverage": 46, + "shape_probe": 144, + "shape_groups": 96, "shape_labels": 12, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 753, + "shape": 450, "phase_prune_and_rank": 0, - "bind": 309, - "phase_bind": 209, - "phase_settle": 82, + "bind": 646, + "phase_bind": 157, + "phase_settle": 101, "phase_place_bindings": 25, "phase_facet_requests": 0, - "materialise": 1061, - "phase_materialise": 233, - "answer": 29, - "options": 385, - "phase_outcome": 165 + "materialise": 602, + "phase_materialise": 196, + "answer": 45, + "options": 138, + "phase_outcome": 93 } }, "restatement": { @@ -3823,10 +4459,10 @@ "assumptions": [], "status": "definite", "spec": { - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "definition": { "schema_version": 1, - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "identity": { "identity_version": "spec1", "shape": { @@ -3849,7 +4485,8 @@ "state": "set", "refs": [ "CRSPurposeCode110", - "CRSPurposeCode120" + "CRSPurposeCode120", + "CRSPurposeCode130" ] } }, @@ -3897,7 +4534,7 @@ "resolved": { "shape": { "shape_id": "financialflow_amount_measuredvalue_nominal", - "label": "gross disbursements (official development assistance)", + "label": "gross disbursements (education, health and population policy, programme, and reproductive health, official development assistance)", "population_type": { "ref": "FinancialFlow", "label": "financial flow" @@ -3924,7 +4561,221 @@ }, "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": 634, + "member_digest": "5c91c0a8d90f4619a1ff7122cacdc8b0bc48b22c70516d7673aec42caf6da0d4", + "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": "set", + "values": [ + { + "ref": { + "ref": "CRSPurposeCode110", + "label": "education" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode120", + "label": "health" + }, + "value_kind": "enum_value" + }, + { + "ref": { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive 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" + }, + { + "ref": "CRSPurposeCode13010", + "label": "population policy and administrative management" + }, + { + "ref": "CRSPurposeCode13020", + "label": "reproductive health care" + }, + { + "ref": "CRSPurposeCode13030", + "label": "family planning" + }, + { + "ref": "CRSPurposeCode13040", + "label": "sexually transmitted disease control" + }, + { + "ref": "CRSPurposeCode13081", + "label": "personnel development for population and reproductive health" + } + ] + }, + "summable": true + }, + { + "key": { "axis": "how", "property": { "ref": "crsTypeOfFinance", @@ -3932,7 +4783,13 @@ }, "label": "instrument" }, - { + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "key": { "axis": "how", "property": { "ref": "crsTypeOfFlow", @@ -3940,7 +4797,20 @@ }, "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", @@ -3948,7 +4818,20 @@ }, "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", @@ -3956,7 +4839,20 @@ }, "label": "netting basis" }, - { + "binding": { + "kind": "value", + "value": { + "ref": { + "ref": "Gross", + "label": "gross" + }, + "value_kind": "enum_value" + } + }, + "summable": false + }, + { + "key": { "axis": "how", "property": { "ref": "crsCooperationModality", @@ -3964,30 +4860,118 @@ }, "label": "modality" }, - { + "binding": { + "kind": "unbound" + }, + "summable": true + }, + { + "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" - } - ], - "member_count": 545, - "member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", - "refine_supported": true, - "data_commons": [ + }, + "binding": { + "kind": "unbound" + }, + "summable": false + } + ], + "inapplicable_slots": [ + "financialObligationType" + ], + "unresolved_slots": [], + "stat_vars": { + "member_count": 123, + "member_count_exact": true, + "served_count": 634, + "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": [ { - "id": "dfo", - "label": "Development Finance Observatory" + "label": "sources", + "count": 1 + }, + { + "label": "observations", + "count": 19 + }, + { + "label": "variables", + "count": 66 } ] }, - "slots": [ + "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", @@ -3995,382 +4979,502 @@ "ref": "crsPurpose", "label": "CRS purpose" }, - "label": "sector" - }, - "binding": { - "kind": "set", - "values": [ - { + "label": "sector" + }, + "options": [ + { + "value": { + "ref": { + "ref": "CRSPurposeCode998", + "label": "unallocated and unspecified" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 76, + "served_rows": 74, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode99810", + "label": "sectors not specified" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode998", + "member_count": 255, + "served_rows": 71, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode99820", + "label": "non-sector allocable promotion of development awareness" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode998", + "member_count": 77, + "served_rows": 3, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode600", + "label": "action relating to debt" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 21, + "served_rows": 9, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode60020", + "label": "debt forgiveness" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode600", + "member_count": 75, + "served_rows": 4, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode60040", + "label": "rescheduling and refinancing" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode600", + "member_count": 54, + "served_rows": 5, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode100", + "label": "social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 13, + "served_rows": 1214, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode140", + "label": "water supply and sanitation" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 10, + "served_rows": 275, + "served_rows_exact": true + }, + { + "value": { "ref": { "ref": "CRSPurposeCode110", "label": "education" }, "value_kind": "enum_value" }, - { + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 9, + "served_rows": 318, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode160", + "label": "other social infrastructure and services" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 7, + "served_rows": 102, + "served_rows_exact": true + }, + { + "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" + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 6, + "served_rows": 194, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12230", - "label": "basic health infrastructure" + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 5, + "served_rows": 81, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode150", + "label": "government and civil society" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12240", - "label": "basic nutrition" + "relation": "child", + "parent": "CRSPurposeCode100", + "member_count": 4, + "served_rows": 244, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode200", + "label": "economic infrastructure and services" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12250", - "label": "infectious disease control" + "relation": "root", + "member_count": 13, + "served_rows": 286, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode240", + "label": "banking and financial services" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12261", - "label": "health education" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 16, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode220", + "label": "communication system and technology" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12262", - "label": "malaria control" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 13, + "served_rows": 23, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode250", + "label": "business environment and governance" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12263", - "label": "tuberculosis control" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 13, + "served_rows": 30, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode210", + "label": "transport and storage" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12264", - "label": "COVID-19 control" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 7, + "served_rows": 97, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode230", + "label": "energy" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12281", - "label": "health personnel development" + "relation": "child", + "parent": "CRSPurposeCode200", + "member_count": 7, + "served_rows": 106, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode300", + "label": "productive sector" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12310", - "label": "general noncommunicable disease control" + "relation": "root", + "member_count": 13, + "served_rows": 493, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode310", + "label": "agriculture, forestry and fishing" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12320", - "label": "tobacco use control" + "relation": "child", + "parent": "CRSPurposeCode300", + "member_count": 12, + "served_rows": 405, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode320", + "label": "industry, mining and construction" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12330", - "label": "control of harmful use of alcohol and drugs" + "relation": "child", + "parent": "CRSPurposeCode300", + "member_count": 9, + "served_rows": 66, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode331", + "label": "trade policies and regulations" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12340", - "label": "mental health and well-being promotion" + "relation": "child", + "parent": "CRSPurposeCode300", + "member_count": 7, + "served_rows": 22, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode400", + "label": "multisector" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12350", - "label": "other noncommunicable disease prevention and treatment" + "relation": "root", + "member_count": 7, + "served_rows": 206, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode430", + "label": "other multisector" + }, + "value_kind": "enum_value" }, - { - "ref": "CRSPurposeCode12382", - "label": "research for noncommunicable disease prevention and control" - } - ] - }, - "summable": true - }, - { - "key": { - "axis": "how", - "property": { - "ref": "crsTypeOfFinance", - "label": "CRS type of finance" + "relation": "child", + "parent": "CRSPurposeCode400", + "member_count": 10, + "served_rows": 162, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode410", + "label": "general environment protection" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode400", + "member_count": 7, + "served_rows": 44, + "served_rows_exact": true }, - "label": "instrument" - }, - "binding": { - "kind": "unbound" - }, - "summable": true - }, - { - "key": { - "axis": "how", - "property": { - "ref": "crsTypeOfFlow", - "label": "CRS type of flow" + { + "value": { + "ref": { + "ref": "CRSPurposeCode500", + "label": "commodity aid and general programme assistance" + }, + "value_kind": "enum_value" + }, + "relation": "root", + "member_count": 5, + "served_rows": 70, + "served_rows_exact": true }, - "label": "flow" - }, - "binding": { - "kind": "value", - "value": { - "ref": { - "ref": "CRSTypeOfFlow10", - "label": "official development assistance" + { + "value": { + "ref": { + "ref": "CRSPurposeCode510", + "label": "budget support" + }, + "value_kind": "enum_value" }, - "value_kind": "enum_value" - } - }, - "summable": true - }, - { - "key": { - "axis": "how", - "property": { - "ref": "financialFlowType", - "label": "financial flow type" + "relation": "child", + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 10, + "served_rows_exact": true }, - "label": "financial flow type" - }, - "binding": { - "kind": "value", - "value": { - "ref": { - "ref": "Disbursement", - "label": "disbursement" + { + "value": { + "ref": { + "ref": "CRSPurposeCode520", + "label": "food assistance" + }, + "value_kind": "enum_value" }, - "value_kind": "enum_value" - } - }, - "summable": false - }, - { - "key": { - "axis": "how", - "property": { - "ref": "nettingBasis", - "label": "netting basis" + "relation": "child", + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 19, + "served_rows_exact": true }, - "label": "netting basis" - }, - "binding": { - "kind": "value", - "value": { - "ref": { - "ref": "Gross", - "label": "gross" + { + "value": { + "ref": { + "ref": "CRSPurposeCode530", + "label": "other commodity assistance" + }, + "value_kind": "enum_value" }, - "value_kind": "enum_value" - } - }, - "summable": false - }, - { - "key": { - "axis": "how", - "property": { - "ref": "crsCooperationModality", - "label": "CRS cooperation modality" + "relation": "child", + "parent": "CRSPurposeCode500", + "member_count": 3, + "served_rows": 41, + "served_rows_exact": true }, - "label": "modality" - }, - "binding": { - "kind": "unbound" - }, - "summable": true - }, - { - "key": { - "axis": "where", - "label": "place" - }, - "binding": { - "kind": "value", - "value": { - "ref": { - "ref": "country/KEN", - "label": "Kenya" + { + "value": { + "ref": { + "ref": "CRSPurposeCode700", + "label": "humanitarian aid" + }, + "value_kind": "enum_value" }, - "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": { - "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" + "relation": "root", + "member_count": 5, + "served_rows": 68, + "served_rows_exact": true }, - "label": "sector" - }, - "options": [ { "value": { "ref": { - "ref": "CRSPurposeCode121", - "label": "general health" + "ref": "CRSPurposeCode720", + "label": "emergency response" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", + "parent": "CRSPurposeCode700", "member_count": 6, - "served_rows": 82, + "served_rows": 46, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode122", - "label": "basic health" + "ref": "CRSPurposeCode730", + "label": "reconstruction and rehabilitation" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 4, - "served_rows": 108, + "parent": "CRSPurposeCode700", + "member_count": 3, + "served_rows": 14, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode123", - "label": "noncommunicable disease" + "ref": "CRSPurposeCode740", + "label": "disaster preparedness" }, "value_kind": "enum_value" }, "relation": "child", - "parent": "CRSPurposeCode120", - "member_count": 3, - "served_rows": 4, + "parent": "CRSPurposeCode700", + "member_count": 0, + "served_rows": 8, "served_rows_exact": true }, { "value": { "ref": { - "ref": "CRSPurposeCode100", - "label": "social infrastructure and services" + "ref": "CRSPurposeCode930", + "label": "support for refugees and asylum seekers in donor countries" }, "value_kind": "enum_value" }, - "relation": "parent", - "member_count": 13, - "served_rows": 1214, + "relation": "root", + "member_count": 3, + "served_rows": 6, + "served_rows_exact": true + }, + { + "value": { + "ref": { + "ref": "CRSPurposeCode93010", + "label": "general support for refugees and asylum seekers in donor countries" + }, + "value_kind": "enum_value" + }, + "relation": "child", + "parent": "CRSPurposeCode930", + "member_count": 57, + "served_rows": 6, "served_rows_exact": true }, { @@ -4453,7 +5557,7 @@ }, "relation": "root", "member_count": 0, - "served_rows": 501, + "served_rows": 582, "served_rows_exact": true }, { @@ -4466,8 +5570,8 @@ }, "relation": "child", "parent": "CRSTypeOfFinance100", - "member_count": 12672, - "served_rows": 501, + "member_count": 12745, + "served_rows": 582, "served_rows_exact": true }, { @@ -4520,8 +5624,8 @@ "value_kind": "enum_value" }, "relation": "root", - "member_count": 14098, - "served_rows": 512, + "member_count": 14146, + "served_rows": 593, "served_rows_exact": true } ], @@ -4548,7 +5652,7 @@ }, "relation": "root", "member_count": 0, - "served_rows": 104, + "served_rows": 118, "served_rows_exact": true }, { @@ -4561,8 +5665,8 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1606, - "served_rows": 21, + "member_count": 1614, + "served_rows": 25, "served_rows_exact": true }, { @@ -4575,8 +5679,8 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1331, - "served_rows": 83, + "member_count": 1337, + "served_rows": 93, "served_rows_exact": true }, { @@ -4589,7 +5693,7 @@ }, "relation": "root", "member_count": 0, - "served_rows": 136, + "served_rows": 173, "served_rows_exact": true }, { @@ -4602,8 +5706,8 @@ }, "relation": "child", "parent": "CRSCooperationModalityC", - "member_count": 7005, - "served_rows": 136, + "member_count": 7041, + "served_rows": 173, "served_rows_exact": true }, { @@ -4616,7 +5720,7 @@ }, "relation": "root", "member_count": 0, - "served_rows": 111, + "served_rows": 116, "served_rows_exact": true }, { @@ -4630,7 +5734,7 @@ "relation": "child", "parent": "CRSCooperationModalityD", "member_count": 1600, - "served_rows": 84, + "served_rows": 87, "served_rows_exact": true }, { @@ -4643,8 +5747,8 @@ }, "relation": "child", "parent": "CRSCooperationModalityD", - "member_count": 976, - "served_rows": 27, + "member_count": 980, + "served_rows": 29, "served_rows_exact": true }, { @@ -4728,7 +5832,7 @@ "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).", + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education, health, and population policy, programme, and reproductive health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS).", "sentence_plan": [ { "kind": "slot", @@ -4801,7 +5905,7 @@ }, { "kind": "slot", - "text": "education and health", + "text": "education, health, and population policy, programme, and reproductive health", "axis": "how", "segment": "heading", "property_dcid": "crsPurpose", @@ -4975,6 +6079,10 @@ { "ref": "CRSPurposeCode120", "label": "health" + }, + { + "ref": "CRSPurposeCode130", + "label": "population policy, programme, and reproductive health" } ], "provenance": "text_recognized" @@ -5130,226 +6238,13 @@ "selected": [] } ], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "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 - } - ], + "alternative_measures": [], "measure_label": "gross disbursements", "measure_label_axes": [ "populationType", @@ -5395,6 +6290,8 @@ } } ], + "concept_label": "education, health, and population policy, programme, and reproductive health", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsTypeOfFinance", @@ -5407,7 +6304,7 @@ "ref": "CRSTypeOfFinance110", "label": "standard grant" }, - "count": 105 + "count": 120 }, { "value": { @@ -5422,42 +6319,42 @@ "property": "crsCooperationModality", "varies": true, "distinct_count": 7, - "undeclared_count": 19, + "undeclared_count": 22, "values": [ { "value": { "ref": "CRSCooperationModalityC01", "label": "project-type intervention" }, - "count": 27 + "count": 30 }, { "value": { "ref": "CRSCooperationModalityB03", "label": "contribution to specific-purpose programme and fund managed by an international organisation" }, - "count": 21 + "count": 24 }, { "value": { - "ref": "CRSCooperationModalityD02", - "label": "other technical assistance" + "ref": "CRSCooperationModalityB01", + "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" }, - "count": 16 + "count": 18 }, { "value": { - "ref": "CRSCooperationModalityB01", - "label": "core support to non-governmental organisations, other private bodies, public-private partnerships, and research institutes" + "ref": "CRSCooperationModalityD02", + "label": "other technical assistance" }, - "count": 15 + "count": 18 }, { "value": { "ref": "CRSCooperationModalityD01", "label": "donor country personnel" }, - "count": 8 + "count": 9 }, { "value": { @@ -7425,25 +8322,396 @@ "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 + "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" + } + }, + "scope_choices": { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "base": { + "schema_version": 1, + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [], + "dropped_entries": [ + { + "entry": { + "axis": "sector", + "option_id": "sector:110", + "provenance": "explicit", + "origin": { + "kind": "text", + "text": "education", + "start": 0, + "end": 9 + } + }, + "code": "stated_choice_not_applied", + "cause": "option_unknown" + } + ], + "choices": [ + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:sector", + "axis": "sector", + "rule": "sector_code", + "provenance": "default", + "active": "sector:110+120+130", + "options": [ + { + "option_id": "sector:110+120+130", + "label": "education (CRS 110) + health (CRS 120) + population policy, programme, and reproductive health (CRS 130)", + "binding": { + "kind": "slot", + "slot": "crsPurpose", + "state": "set", + "refs": [ + "CRSPurposeCode110", + "CRSPurposeCode120", + "CRSPurposeCode130" + ] + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:gross", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2:provider", + "axis": "provider", + "rule": "bilateral_flows", + "provenance": "default", + "active": "provider:bilateral", + "options": [ + { + "option_id": "provider:bilateral", + "label": "bilateral flows only", + "binding": { + "kind": "provider", + "scope": "bilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "provider:inclusive", + "label": "bilateral plus imputed multilateral, 2011 to 2024", + "binding": { + "kind": "provider", + "scope": "inclusive", + "window": [ + 2011, + 2024 + ], + "provenance": "provenance/ONEBilateralAndImputedMultilateral" + }, + "availability": { + "status": "partial", + "years": [ + [ + 2011, + 2024 + ] + ], + "code": "imputed_coverage", + "detail": {} + } + } + ] } ], - "default_base_year": 2024, - "role_currencies": { - "destination": "KES", - "origin": "EUR" - } + "compiled": { + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + }, + "components": [ + { + "role": "whole", + "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", + "CRSPurposeCode130" + ] + } + }, + { + "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" + } + } + } + ] + }, + "ledger": [] } } } @@ -7463,30 +8731,30 @@ } ], "timing_ms": { - "total": 2851, + "total": 5202, "by_step": { - "recall": 360, + "recall": 1145, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe_coverage": 2, - "shape_probe": 121, - "shape_groups": 841, - "shape_labels": 17, - "shape_admission": 4, + "shape_arcs": 5, + "shape_probe_coverage": 4, + "shape_probe": 1327, + "shape_groups": 85, + "shape_labels": 11, + "shape_admission": 2, "phase_derive_shapes": 0, - "shape": 1100, + "shape": 1663, "phase_prune_and_rank": 0, - "bind": 261, - "phase_bind": 16, - "phase_settle": 7, - "phase_place_bindings": 554, + "bind": 216, + "phase_bind": 39, + "phase_settle": 18, + "phase_place_bindings": 1429, "phase_facet_requests": 0, - "materialise": 96, - "phase_materialise": 17, - "answer": 239, - "options": 188, - "phase_outcome": 13 + "materialise": 147, + "phase_materialise": 19, + "answer": 102, + "options": 400, + "phase_outcome": 24 } }, "restatement": { @@ -8923,7 +10191,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -9456,7 +10724,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [ @@ -9495,12 +10763,14 @@ "confidence": "high", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "IMF World Economic Outlook (WEO)" } } ], "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "World Development Indicators", "related_group": { "ref": "dc/g/EconomicActivity_ActivitySource-GrossDomesticProduction", "label": "Economic Activity With Activity Source = Gross Domestic Production" @@ -9548,7 +10818,7 @@ } } ], - "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.", + "rendered_sentence": "Germany's gross ODA disbursements to Kenya for education, health, and population policy, programme, and reproductive 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", @@ -9621,7 +10891,7 @@ }, { "kind": "slot", - "text": "education and health", + "text": "education, health, and population policy, programme, and reproductive health", "axis": "how", "segment": "heading", "property_dcid": "crsPurpose", @@ -9955,10 +11225,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "definition": { "schema_version": 1, - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "identity": { "identity_version": "spec1", "shape": { @@ -9981,7 +11251,8 @@ "state": "set", "refs": [ "CRSPurposeCode110", - "CRSPurposeCode120" + "CRSPurposeCode120", + "CRSPurposeCode130" ] } }, @@ -10038,13 +11309,13 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "9b2918c16ee54353a38b2401d62c118a" + "x-dfo-trace-id": "557550d777fb412fa5e6e590fb30997c" }, "json": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_25f482395c5d012ec278118f38dff29c", + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", "identity": { "shape": { "kind": "statvar_schema", @@ -10064,7 +11335,8 @@ "binding": { "refs": [ "CRSPurposeCode110", - "CRSPurposeCode120" + "CRSPurposeCode120", + "CRSPurposeCode130" ], "state": "set" }, @@ -10112,10 +11384,10 @@ } } }, - "content_version": "cv_d6ce435ea267b46680c94eae9423d420", - "prepared_at": "2026-10-20T15:55:47Z", + "content_version": "cv_b600e3429190c07d98f8d59720cde7ba", + "prepared_at": "2026-10-29T22:25:13Z", "coverage": { - "rows": 512, + "rows": 593, "dimensions": [ { "label": "financingProvider", @@ -10171,8 +11443,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1973-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -10183,8 +11455,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Exclude donor core contributions to multilaterals", @@ -10204,13 +11476,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -10256,21 +11538,21 @@ "end_year": 2024, "start_year": 1997 }, - "graph_revision": "dfo-dev-dc-datacommons-service-00259-rpx", + "graph_revision": "dfo-dev-dc-datacommons-service-00280-hww", "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-20T13:18:18Z", - "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-29T17:06:13Z", + "content_hash": "000e2f88c4c71cf9ae60911d71c97dbc43c13ccb291ef9ca3584d75157b97e9e", "graph_endpoint": "graph_release" }, "source_revisions": [ { "source": "provenance/OECDCreditorReportingSystem", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_1e6cd9546fac19e9", - "materialiser_build": "8408f1f95c622223f8fa6e9ba55826ee8e22a852", + "capability_version": "dset_9ab17ec0e311a676", + "materialiser_build": "822036e7baafeec121646d059962f75762f849db", "resolved_stat_vars": [ { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA01_CRSPurposeCode11330_Nominal", @@ -10504,6 +11786,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityA02_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode11110_Nominal", "roles": [ @@ -10776,6 +12098,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 3 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 4 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB01_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode11110_Nominal", "roles": [ @@ -10960,6 +12322,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB031_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode11110_Nominal", "roles": [ @@ -11153,7 +12555,47 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12263_Nominal", + "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" @@ -11161,7 +12603,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12264_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12340_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11169,7 +12611,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12281_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12350_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11177,7 +12619,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12310_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12382_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11185,7 +12627,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12320_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13010_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11193,7 +12635,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12330_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13020_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11201,7 +12643,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12340_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13030_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11209,7 +12651,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12350_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13040_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11217,7 +12659,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode12382_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB032_CRSPurposeCode13081_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -11464,6 +12906,38 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB033_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode11110_Nominal", "roles": [ @@ -11736,6 +13210,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB03_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode11110_Nominal", "roles": [ @@ -11960,6 +13474,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityB04_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode11110_Nominal", "roles": [ @@ -12232,6 +13786,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 19 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 8 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 10 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityC01_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode11110_Nominal", "roles": [ @@ -12504,6 +14098,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD01_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode11110_Nominal", "roles": [ @@ -12776,6 +14410,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 1 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 2 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityD02_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode11110_Nominal", "roles": [ @@ -12945,7 +14619,47 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12261_Nominal", + "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" @@ -12953,7 +14667,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12262_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12382_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12961,7 +14675,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12264_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13010_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12969,7 +14683,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12281_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13020_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12977,7 +14691,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12310_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13030_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12985,7 +14699,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12340_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13040_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -12993,7 +14707,7 @@ "observation_count": 0 }, { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode12382_Nominal", + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityE01_CRSPurposeCode13081_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -13320,6 +15034,30 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityG01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode11110_Nominal", "roles": [ @@ -13456,6 +15194,38 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityH02_CRSPurposeCode12191_Nominal", "roles": [ @@ -13464,6 +15234,22 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityJ01_CRSPurposeCode12191_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSCooperationModalityJ01_CRSPurposeCode12264_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode11110_Nominal", "roles": [ @@ -13648,6 +15434,46 @@ ], "observation_count": 6 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 7 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 5 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 13 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance110_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode11120_Nominal", "roles": [ @@ -13760,6 +15586,30 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance210_CRSCooperationModalityC01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode11110_Nominal", "roles": [ @@ -13832,6 +15682,22 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode11110_Nominal", "roles": [ @@ -14000,6 +15866,38 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityA02_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityB031_CRSPurposeCode12110_Nominal", "roles": [ @@ -14280,6 +16178,46 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityC01_CRSPurposeCode13081_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", "roles": [ @@ -14456,6 +16394,38 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode13010_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance421_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance422_CRSCooperationModalityE01_CRSPurposeCode11420_Nominal", "roles": [ @@ -14552,6 +16522,30 @@ ], "observation_count": 0 }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode13020_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode13030_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, + { + "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSCooperationModalityC01_CRSPurposeCode13040_Nominal", + "roles": [ + "financingProvider", + "financingRecipient" + ], + "observation_count": 0 + }, { "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_CRSTypeOfFlow10_CRSTypeOfFinance510_CRSPurposeCode11110_Nominal", "roles": [ @@ -14633,12 +16627,12 @@ "observation_count": 0 } ], - "family_member_count": 545, - "family_member_digest": "0c7508fd1997d6cdc896f2eab0f092a4915cfca9e2400eb9577bb22b527fe882", + "family_member_count": 634, + "family_member_digest": "5c91c0a8d90f4619a1ff7122cacdc8b0bc48b22c70516d7673aec42caf6da0d4", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", - "served_from": "head", - "confirmed_at": "2026-10-26T09:18:03.336477+00:00" + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:37:38.826442+00:00" }, "warnings": [], "diagnostics": [ @@ -14650,41 +16644,41 @@ ], "artifacts": [ { - "artifact_digest": "sha256:a189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8", + "artifact_digest": "sha256:228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2", "rendering": { "bundle": false, "format": "parquet", "layout": 4, "without_party_totals": true }, - "bytes": 16208, + "bytes": 17220, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-23T16:58:41.714148+00:00", + "created_at": "2026-10-29T22:25:13.591902+00:00", "tier": "working", - "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_7a02b6facd2dc17b5d0d7c35c11bf5d2/cv_b600e3429190c07d98f8d59720cde7ba/files/sha256:228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179", + "artifact_digest": "sha256:46ec27bbc997b14d9d27305b59ebea27b24147358398f60652b1383a4a3da043", "rendering": { "statistics": "series" }, - "bytes": 11612, + "bytes": 12381, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-20T15:55:47.734234+00:00", + "created_at": "2026-10-29T22:25:13.591902+00:00", "tier": "working", - "url": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a5d2d7627c8fe1357519ca0ac021c791182ab08c76f44e8055b4bb50a6059179" + "url": "/api/datasets/spec_7a02b6facd2dc17b5d0d7c35c11bf5d2/cv_b600e3429190c07d98f8d59720cde7ba/files/sha256:46ec27bbc997b14d9d27305b59ebea27b24147358398f60652b1383a4a3da043" } ], - "series_count": 108, + "series_count": 123, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", "kind": "grain", "droppable": false, - "distinct": 108 + "distinct": 123 }, { "name": "financingProvider", @@ -14761,7 +16755,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -14773,7 +16768,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -14785,7 +16781,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -14797,7 +16794,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -14809,7 +16807,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -14821,7 +16820,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -14833,7 +16833,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -14845,7 +16846,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -14857,7 +16859,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -14869,7 +16872,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -14881,7 +16885,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -14893,7 +16898,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -14905,7 +16911,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -14917,7 +16924,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -14933,14 +16941,14 @@ "columns": "time_period", "state": "available", "width": 29, - "cells": 3132 + "cells": 3567 }, { "index": "time_period", "columns": "stat_var", "state": "available", - "width": 109, - "cells": 3052 + "width": 124, + "cells": 3472 } ], "groupby": { @@ -14961,10 +16969,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-19T15:55:47.734809Z" + "held_until": "2026-11-28T22:25:13.592229Z" } } } @@ -14972,21 +16980,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_25f482395c5d012ec278118f38dff29c/cv_d6ce435ea267b46680c94eae9423d420/files/sha256:a189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8" + "origin_path": "/api/datasets/spec_7a02b6facd2dc17b5d0d7c35c11bf5d2/cv_b600e3429190c07d98f8d59720cde7ba/files/sha256:228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8?X-Goog-Signature=redacted", - "x-dfo-trace-id": "b06362d84bb845e786735d92808b1b48" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2?X-Goog-Signature=redacted", + "x-dfo-trace-id": "ba92a42f29eb49f5bdb4cbdd7c047cb4" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa189b171faab41729ddc1317add46add9b5eefb5fcac62a98cb735cb5f20f0f8?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A228f4a6d447c0e6a811c951c10522dda47f68ae38efede7be384c4c7e7d6f2d2?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -15073,7 +17081,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4e3b97d6e0814dc7ae89509dcb63b46b" + "x-dfo-trace-id": "39917f146e6b4935a6200e27d0cd672b" }, "json": { "schema_version": 1, @@ -15250,7 +17258,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:05.070107+00:00" + "confirmed_at": "2026-11-01T07:37:40.580774+00:00" }, "warnings": [], "diagnostics": [ @@ -15289,7 +17297,7 @@ ], "series_count": 2, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -15366,7 +17374,8 @@ "covered": 2 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "observationAbout", @@ -15378,7 +17387,8 @@ "covered": 2 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "observationAbout", @@ -15390,7 +17400,8 @@ "covered": 2 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "observationAbout", @@ -15402,7 +17413,8 @@ "covered": 2 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false } ], "long_layout_defaults": [ @@ -15443,7 +17455,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T15:55:49.978519Z" @@ -15461,7 +17473,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A9ff8d7d0df398e2b298b22f54828fb187c705888db1816d223137c950d037839?X-Goog-Signature=redacted", - "x-dfo-trace-id": "dd6c261d3d2e4566bdc4071ef3834710" + "x-dfo-trace-id": "d5e8dafe390347b39afb2f285e3ce682" } } }, @@ -15484,10 +17496,10 @@ "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.", + "sentence": "Germany's gross ODA disbursements to Kenya for education, health, and population policy, programme, and reproductive 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_7a02b6facd2dc17b5d0d7c35c11bf5d2", "spec_f8dea3052d1ef6ba5667628815d1a663" ], "gaps": [] @@ -15495,7 +17507,7 @@ }, { "dataset": { - "rows": 644, + "rows": 725, "columns": [ "part", "time_period", @@ -15531,7 +17543,7 @@ "part_rows": [ { "part": "health ODA disbursements; education ODA disbursements", - "rows": 512 + "rows": 593 }, { "part": "GDP", @@ -15545,9 +17557,9 @@ "health ODA disbursements", "education ODA disbursements" ], - "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)." + "spec_id": "spec_7a02b6facd2dc17b5d0d7c35c11bf5d2", + "content_version": "cv_b600e3429190c07d98f8d59720cde7ba", + "sentence": "Germany's gross ODA disbursements to Kenya for education, health, and population policy, programme, and reproductive health, 1997 to 2024. Current US dollars · OECD Creditor Reporting System (CRS)." }, { "parts": [ 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 index 25ade330903c378c7e337709db3cdc62bade95ee..3fe002ef2c6484cac887bf8067b8a7a59f739431 100644 GIT binary patch delta 7755 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 K%UnyTopWlA( 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 delta 701 zcmaJdDYd!^FBW}&pYRscNpEf_N9wh zyn)19s92PV!X`m*g$o>lAb>s2KniNAYirxCo7&1X$g%#y*Hh?o;+Knhv z91h);pep-ZuLLsu7QCuN19cR|5;JT0HQs~NZ2rNM`-swnD>mYWpehL?3lm^mm9kOv zJQ|Xex#d|h#_|9~dF7$CHK>c~ZnW)w-zGJN?1jyQ;^LRY&Ah1WvQ#(s)7c?~d<&C= zvfH|0Kx*o;_d31IJ+p9DGFU)4Ev^14=exZogzyf8bFXNYGE-hk$k}X z4u(vW3>lgd+^*oWa8*-529?~WghkCUyukQFC= acGb)t?X-+j?P&kB(XXHvVg=#f&;A8h5apKu 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 index f5318d4..a13fdff 100644 --- 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 @@ -5,17 +5,17 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:27Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:38:22Z" }, "call": [ { "op": "fetch", "spec": { - "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "spec_id": "spec_fc5ce33e120fc3dcba5e02f0655a4258", "definition": { "schema_version": 1, - "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "spec_id": "spec_fc5ce33e120fc3dcba5e02f0655a4258", "identity": { "identity_version": "spec1", "shape": { @@ -50,7 +50,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -110,7 +110,7 @@ } } }, - "sentence": "Germany's gross disbursements to the 44 Least Developed Countries for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Germany's net 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", @@ -134,10 +134,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "spec_id": "spec_fc5ce33e120fc3dcba5e02f0655a4258", "definition": { "schema_version": 1, - "spec_id": "spec_17a33486ccfd93f1a75c2070bab68b8c", + "spec_id": "spec_fc5ce33e120fc3dcba5e02f0655a4258", "identity": { "identity_version": "spec1", "shape": { @@ -172,7 +172,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -297,54 +297,15 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e32f376d58684753b9bc195b1429569b" + "x-dfo-trace-id": "cf3527fa181f4bd294cc8bdcb8d8b510" }, "json": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_c2f21170dfa9f31705e47ed60c8fa305", + "spec_id": "spec_d0fa2dd4c5ba67436b13a12bb98547d4", "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/FRA" - ], "destination": [ "country/AFG", "country/AGO", @@ -390,18 +351,57 @@ "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": "Net", + "state": "value" + }, + "property": "nettingBasis" + } + ] } }, - "content_version": "cv_66a0a4a0331d59b519aa1629dade3d99", - "prepared_at": "2026-10-21T07:08:52Z", + "content_version": "cv_070d2755d6bf2ffa39860ca05c717279", + "prepared_at": "2026-11-01T07:38:23Z", "coverage": { - "rows": 2114, + "rows": 2128, "dimensions": [ { "label": "financingProvider", @@ -428,9 +428,9 @@ ], "window": { "kind": "all", - "origin": "default", + "start_year": 1960, "end_year": 2024, - "start_year": 1960 + "origin": "default" } }, "citation": { @@ -457,8 +457,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1960-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -469,8 +469,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Standardise providers and recipients", @@ -490,13 +490,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -516,72 +526,72 @@ ] }, "trace": { - "facets": [ - { - "ref": "provenance/OECDDAC2A", - "axis": "provenance", - "basis": "deployment_fallback", - "default_policy": "dfo/facet-policy/most-observations", - "selection_reason": "sole_candidate", - "dispatch_facet_id": "1962969911839422253", - "default_policy_version": "1" - }, - { - "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": "all", - "origin": "default", + "start_year": 1960, "end_year": 2024, - "start_year": 1960 + "origin": "default" }, - "graph_revision": "dfo-dev-dc-datacommons-service-00260-6xk", - "normalisations": [], + "graph_revision": "dfo-dev-dc-datacommons-service-00284-j2f", "code_index_stamp": { - "exported_at": "2026-10-20T19:50:14Z", - "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "content_hash": "a1bde3be8710f5ba073e52aaaba73cf9156079c273c874372f54bb07a81b0f94", + "exported_at": "2026-11-01T03:08:18Z", "graph_endpoint": "graph_release" }, + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", "source_revisions": [ { "source": "provenance/OECDDAC2A", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_1e6cd9546fac19e9", - "materialiser_build": "36b9f48d83282bcd5d99cb8f67b83e57a00216fd", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" ], - "observation_count": 2114 + "observation_count": 2128 } ], + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "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", - "origin_catalogue_build_id": "20261021T070020Z-7262111e", - "served_from": "head", - "confirmed_at": "2026-10-26T09:18:36.478834+00:00" + "materialiser_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "capability_version": "dset_5282a0674178a233", + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:38:23.690796+00:00" }, "warnings": [], "diagnostics": [ @@ -593,35 +603,35 @@ ], "artifacts": [ { - "artifact_digest": "sha256:e9513ce3953896d5b833a71546a5987a82e3f18219cd43eb987fc69dfab80321", + "artifact_digest": "sha256:e394e0de88d7c5b0e9488b0169a229b2261005a5ab2d7b9a4d8e2dd925da5fa1", "rendering": { "bundle": false, "format": "parquet", "layout": 4, "without_party_totals": true }, - "bytes": 21121, + "bytes": 21244, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-25T14:20:06.098634+00:00", + "created_at": "2026-11-01T07:38:23.639888+00:00", "tier": "working", - "url": "/api/datasets/spec_c2f21170dfa9f31705e47ed60c8fa305/cv_66a0a4a0331d59b519aa1629dade3d99/files/sha256:e9513ce3953896d5b833a71546a5987a82e3f18219cd43eb987fc69dfab80321", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_d0fa2dd4c5ba67436b13a12bb98547d4/cv_070d2755d6bf2ffa39860ca05c717279/files/sha256:e394e0de88d7c5b0e9488b0169a229b2261005a5ab2d7b9a4d8e2dd925da5fa1", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:b1f80f2d3df16b6cda3831730ee4749b13e1eb3fff82cdf2f479e71f087bfe2b", + "artifact_digest": "sha256:2b399bedb12605f62e1688725984e5969e06abf9265bfa19e7bb7febdc50d989", "rendering": { "statistics": "series" }, - "bytes": 8093, + "bytes": 8128, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-21T07:08:52.857494+00:00", + "created_at": "2026-11-01T07:38:23.639888+00:00", "tier": "working", - "url": "/api/datasets/spec_c2f21170dfa9f31705e47ed60c8fa305/cv_66a0a4a0331d59b519aa1629dade3d99/files/sha256:b1f80f2d3df16b6cda3831730ee4749b13e1eb3fff82cdf2f479e71f087bfe2b" + "url": "/api/datasets/spec_d0fa2dd4c5ba67436b13a12bb98547d4/cv_070d2755d6bf2ffa39860ca05c717279/files/sha256:2b399bedb12605f62e1688725984e5969e06abf9265bfa19e7bb7febdc50d989" } ], "series_count": 44, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -704,7 +714,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -716,7 +727,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -728,7 +740,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -740,7 +753,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -752,7 +766,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -764,7 +779,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -776,7 +792,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -788,7 +805,8 @@ "covered": 44 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -806,7 +824,8 @@ "label": "South Sudan" } ], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -818,7 +837,8 @@ "covered": 44 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -830,7 +850,8 @@ "covered": 44 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -842,7 +863,8 @@ "covered": 44 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -854,7 +876,8 @@ "covered": 44 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -866,7 +889,8 @@ "covered": 44 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -910,10 +934,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-20T07:08:52.858156Z" + "held_until": "2026-12-01T07:38:23.640348Z" } } } @@ -931,46 +955,7 @@ "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" - } - ], "entities": { - "origin": [ - "country/FRA" - ], "destination": [ "country/AFG", "country/AGO", @@ -1016,12 +1001,51 @@ "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": "Net", + "state": "value" + }, + "property": "nettingBasis" + } + ] }, "entity_groups": { "destination": { @@ -1038,7 +1062,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "76155faedf434e46b697c5bd58c318f8" + "x-dfo-trace-id": "4134f9d61c9a407e9261b5d371a48ee4" }, "json": { "schema_version": 1, @@ -1047,11 +1071,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "76155faedf434e46b697c5bd58c318f8", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "4134f9d61c9a407e9261b5d371a48ee4", "warnings": [], "timing_ms": { - "total": 2, + "total": 97, "by_step": { "coverage": 0 } @@ -1064,9 +1088,39 @@ "variable_text": "dataset", "warnings": [], "timing_ms": { - "total": 0, + "total": 84, "by_step": { - "response_cache_part_memo": 0 + "validate": 1, + "phase_validate": 0, + "walk": 0, + "reread_arcs": 0, + "phase_reread_arcs": 0, + "detect_edits": 0, + "phase_detect_edits": 0, + "resolve_survivors": 0, + "phase_resolve_survivors": 0, + "shape": 1, + "phase_build_shape": 0, + "bind": 0, + "phase_build_bindings": 0, + "where_places": 0, + "phase_where_places": 0, + "materialise": 21, + "phase_materialise": 0, + "ground_related": 0, + "ground_units": 0, + "ground_facets": 0, + "ground_convert": 0, + "answer": 10, + "ground_gates": 2, + "phase_ground_build": 46, + "finalize_preview": 0, + "options": 3, + "finalize_related": 0, + "finalize_wholes": 0, + "finalize_relaunch": 0, + "phase_finalize": 0, + "served_entry": 0 } }, "entity_refs": [], @@ -1081,10 +1135,10 @@ "assumptions": [], "status": "definite", "spec": { - "spec_id": "spec_c2f21170dfa9f31705e47ed60c8fa305", + "spec_id": "spec_d0fa2dd4c5ba67436b13a12bb98547d4", "definition": { "schema_version": 1, - "spec_id": "spec_c2f21170dfa9f31705e47ed60c8fa305", + "spec_id": "spec_d0fa2dd4c5ba67436b13a12bb98547d4", "identity": { "identity_version": "spec1", "shape": { @@ -1119,7 +1173,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -1182,7 +1236,7 @@ "resolved": { "shape": { "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", - "label": "gross disbursements (official development assistance)", + "label": "net disbursements (official development assistance)", "population_type": { "ref": "FinancialFlow", "label": "financial flow" @@ -1247,7 +1301,7 @@ } ], "member_count": 1, - "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "refine_supported": true, "data_commons": [ { @@ -1312,8 +1366,8 @@ "kind": "value", "value": { "ref": { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" }, "value_kind": "enum_value" } @@ -1969,7 +2023,7 @@ "coverage": { "kind": "exact", "has_data": true, - "observation_count": 2114, + "observation_count": 2128, "evidence": "facet_metadata", "dimensions": [ { @@ -2026,7 +2080,7 @@ ] }, "download": { - "rows": 2114, + "rows": 2128, "rows_exact": true, "series": 44, "window": { @@ -2037,7 +2091,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -2083,60 +2137,60 @@ "relation": "child", "parent": "DAC2aAidType206", "member_count": 2, - "served_rows": 1091, + "served_rows": 1691, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType201", - "label": "ODA grant" + "ref": "DAC2aAidType219", + "label": "recovery on ODA grants and capital subscriptions" }, "value_kind": "enum_value" }, "relation": "child", "parent": "DAC2aAidType206", "member_count": 1, - "served_rows": 2095, + "served_rows": 147, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType207", - "label": "free-standing technical co-operation" + "ref": "DAC2aAidType209", + "label": "interest received on ODA lending" }, "value_kind": "enum_value" }, "relation": "root", "member_count": 1, - "served_rows": 2021, + "served_rows": 816, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType213", - "label": "developmental food aid" + "ref": "DAC2aAidType250", + "label": "official development assistance excluding debt relief" }, "value_kind": "enum_value" }, "relation": "root", "member_count": 1, - "served_rows": 845, + "served_rows": 2129, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType216", - "label": "humanitarian aid" + "ref": "DAC2aAidType255", + "label": "debt relief" }, "value_kind": "enum_value" }, "relation": "root", "member_count": 1, - "served_rows": 545, + "served_rows": 909, "served_rows_exact": true } ], @@ -2179,7 +2233,7 @@ "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.", + "rendered_sentence": "France's net disbursements to the 44 Least Developed Countries for official development assistance, 1960 to 2024. Current US dollars · OECD DAC2a.", "sentence_plan": [ { "kind": "slot", @@ -2210,7 +2264,7 @@ }, { "kind": "slot", - "text": "gross disbursements", + "text": "net disbursements", "axis": "what", "segment": "heading", "entity_refs": [], @@ -2650,8 +2704,8 @@ "binding_kind": "value", "refs": [ { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" } ], "provenance": "binder" @@ -2875,7 +2929,7 @@ } ], "query_qualifiers": [], - "capability_version": "cap_765c9d2a0c7529b9" + "capability_version": "cap_4913302d7a6b6435" }, "confidence": "high", "available_at_place": true, @@ -2883,7 +2937,7 @@ { "definition": { "schema_version": 1, - "spec_id": "spec_d0fa2dd4c5ba67436b13a12bb98547d4", + "spec_id": "spec_c2f21170dfa9f31705e47ed60c8fa305", "identity": { "identity_version": "spec1", "shape": { @@ -2918,7 +2972,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Net" + "ref": "Gross" } } ], @@ -2978,7 +3032,7 @@ } } }, - "label": "net disbursements", + "label": "gross disbursements", "axis": "what", "measure_axis_values": [ { @@ -3012,16 +3066,16 @@ { "axis": "nettingBasis", "value": { - "ref": "Net", - "label": "net" + "ref": "Gross", + "label": "gross" } } ], - "served_rows": 2128, + "served_rows": 2114, "served_rows_exact": true } ], - "measure_label": "gross disbursements", + "measure_label": "net disbursements", "measure_label_axes": [ "populationType", "measuredProperty", @@ -3061,11 +3115,13 @@ { "axis": "nettingBasis", "value": { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" } } ], + "concept_label": "official development assistance", + "published_tables": "OECD DAC2a", "unit_conversion": { "currencies": [ { @@ -5038,7 +5094,7 @@ } } ], - "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.", + "rendered_sentence": "France's net 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", @@ -5072,7 +5128,7 @@ }, { "kind": "slot", - "text": "gross disbursements", + "text": "net disbursements", "axis": "what", "segment": "heading", "entity_refs": [], @@ -5296,21 +5352,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_c2f21170dfa9f31705e47ed60c8fa305/cv_66a0a4a0331d59b519aa1629dade3d99/files/sha256:e9513ce3953896d5b833a71546a5987a82e3f18219cd43eb987fc69dfab80321" + "origin_path": "/api/datasets/spec_d0fa2dd4c5ba67436b13a12bb98547d4/cv_070d2755d6bf2ffa39860ca05c717279/files/sha256:e394e0de88d7c5b0e9488b0169a229b2261005a5ab2d7b9a4d8e2dd925da5fa1" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ae9513ce3953896d5b833a71546a5987a82e3f18219cd43eb987fc69dfab80321?X-Goog-Signature=redacted", - "x-dfo-trace-id": "75d565fbb9c948c8b131be201b1cf923" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ae394e0de88d7c5b0e9488b0169a229b2261005a5ab2d7b9a4d8e2dd925da5fa1?X-Goog-Signature=redacted", + "x-dfo-trace-id": "bb5a9505e2a64357a4be484a60822e8e" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ae9513ce3953896d5b833a71546a5987a82e3f18219cd43eb987fc69dfab80321?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ae394e0de88d7c5b0e9488b0169a229b2261005a5ab2d7b9a4d8e2dd925da5fa1?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -5324,7 +5380,7 @@ "expect": [ { "dataset": { - "rows": 2114, + "rows": 2128, "columns": [ "time_period", "financingProvider_label", @@ -5351,9 +5407,9 @@ "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." + "spec_id": "spec_d0fa2dd4c5ba67436b13a12bb98547d4", + "content_version": "cv_070d2755d6bf2ffa39860ca05c717279", + "sentence": "France's net 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 index 6c76c4ade11ca1847346c1b9b2b4c638e2521786..c7afe73e3cf881eaaa156ce1acdb9eeb59b26e82 100644 GIT binary patch delta 14220 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 ataZ_H6=L$B@#tR(8J@TRa!&dKy#E5j65v_@ delta 14086 zcmb_@cUV(d_wEkv;0^=~5ssm#K}}2$HCPaPPy&fqP*EeI#)1+HMr_FF1F(Xn99s3_P59i2f3^{(SM_xZl(_s6}@eJ+0-a?aU%pS9O|*SpF| z8VXrig{3^;1PiM2r290Vh}=>hWS^sq^;`#Z(d~Zo3IOc@1SUDELl9GR?TUNvfeg6CQ6jmD;w2UQU z|1uTS8qc`zl0Eip59hqb-M*g> zY}^~p^BRx(F6pzzEm$NsFyMk`ctDPY%jw2B&#lY-rU=VGPPIPo4I+K+Ey(S~LY~=? ztmR3pHAO7)=b1Bu*eL7AJuLr~iDT8dI|F2hj_#T{(F4yE=3eta`XA#x$cvK~cmKsg zpY{*+;JzMsuiFOjsA$g^gYtoILCNZCSE+4Ici%sk`^j zSeCnko!j1n=M7dw3`QQX0`_kLlw1$~1`}tRMd-aV;dTR?aOq)=rEDJ2y;{bC6M=38 z{FArnWM&aU-~E*%B&>zmEFPEVH-0YM5lH7{!JP!JeK5yed!B9N%5~9`Spu%3t=!_z z9o8OCjO5hg!CEOHceZ7+g=BW#95x}D4SF`g;&E&zL3zNo-tK57zMh9eCe9!B>#3Ak(oM~NMmISx`aE|D$4`OzGL7X`r~A)Z4>7c`tD zw0z<=SBp})brFe+K$N-{Pkw+${(5jBvzKv4SHeFeyww@5(L*|c7#VX_YOFq@(vddf zMzaO@@M(@6+jnw`h%8|YoJ;0OHDp?LDw~IgWLReT1nP081dagz70!_m+w~vW0^*sK z1FO>V*rl-E?$@9VRJuixKv3cljszEIn0+3(#8Hy$4_cOtp!K;@H;x%CO(o8X2{7NC zHXbJKTq8ANxhJOz7dKJ32)bFUpb6Ukn<@j_%RmG5J;6fq{Uh`n*mAshJ;zBd3{C^7 z{@g3ABReu?v3NxO+9HDE9f#D4o2+KGI56} zn2E6WaIFpBST9xMOFwhmm>vQWxSc8^PH4|@;`-&F-MSJ^Do!55RueQ}sh({mX!3ow zj-VQUjvVtmIHmZ#CntkAl2ce_F3M3(gYA43F=mXK%BjQF&M7cOmH@^DGfHr;5{?GH z@_{{V?*fu$S)^5DVBr#00$1Mu<7$AEBeSg{gX?f57Qm+HqiG^Hm)5^Ef?|i`<$A_~ zN3(unKpcp%lyn^S?eOUZ!qN?M*%CrayQ-qdb49L?jIHC+3#dGR zumgX!zyfHH$l&0j1^iX8c1-hpW=(aNp@tytOMu#sD_||e<$wX{%X+q*XvQ=$=w-yU zRSue~`yvD-C|9Jjjl?`v!IlyGACuUrWX8}4b`jV8L2PBEa%F8AZ3BTf?m7wtLD0ZL zl@$wbflg)lQU_>PT95C~GdXb1ZMgQToz#xgj)6}4-$?=aC$5%C@Vq4{bp*|k!Trh8 z4TR{?!+9Jb?im7N(jJf4b;L1=5=jVpQN?x>^!6OcOrNRZ$Z+9OQ5B)brm?FCns!qg zMFbB_EC+FwBlGeWkWaq6meC$xoTB8)6K`$;{8Pc88po6* zcmh37Co&Vgyut#P(5Rj41cGjj;}qeW96+%g59a7d(hqA{NVkyK-2qZP$He5B`P9__f(sTm0z_E><%^waH~aHGxp+WX}sYA%;~qF zSU~Q!TEMardj553DSo>{0G*BiyMOvkWyk!L;9ogPlNoc9!K5>?flF?9OA&VG!>75SaE*?r)L?m= zaJ#k=REeAmsWfgPOQ|*i)?B3-*nLEE%^~ zx60k1nQYb;k)5mV`NIJ)G;(&E3~uTET&%-S6Qnc_?=IC~V;HbqMscMa|FNT3fcKYi zYVei8AWc4-u~~1oGy`||ELGwcD&P%zaB)h4o;bd&W*1?3t%)Y|Zn+_Ypq9U+C<%&h z%-Hi-G$>-3zXDK@yx1ToXo`s~Cys})u(PxKQc8)V49y?TyWBl^oPc z3BB;)dsGz%3j(zncxPjd6(eH`C}%i=r$%j53Gmy_fFD$Sh}nMpd*Bn)d@iH7V`kVt z0!FODSC*tC5W1$EA+AkcKs=~*kRgG{3wM=+dlqFXYKOw3?Z{No_}oep0!mRiaPoeIgFAUr<&97e%AcFI@IiT`>quEv5)UiXavA}{0rSK459}!K^c%ELQBZ8Wl)pk;~vk~mXS+NaR zffhe!7ZKf<`6)b7pL-iDx$rhy$kjFLyaxQY^x7>D_SBSz01%`me5V&dJNj$uvE&(5 zN^tTekUz`Lhed2bhi$PVqB1pmx2c2+zrb_=Q5geTn052pMu@+R~kU}X*QJ%b1$nTxW@^O9E0)e!7cut z$u{H12`~!tI6AC(A}zvuS8$B@%2qI8Qf~-Y!zO~$3>e1I;O;#*`UE`sBN$V?7H$XI zL5v;!MH+&Ju7G$geElmxPS~4CbLzA+0A2QZPeg>sS`LD(+w^BeN|Nw*Am2fVx;%|9 zfviQX1iM*v17K?nzg1>n7a#Hf-8w*g%mon2-VAmY0-=i_{~}0L0`xaUbp+kT(ga-Y z2Tvb;52C^AJ>a8jOMn#6!51nT<#J%Z@A|29kTx&~OE?AAL86(A6NiZzH?6z_bI+(i zPBi)+Uj}HHH_QOrXn$Nw<2XG;GgLYWRu1}VlHol~Kmq%Q!$o?f-o*TSeVLiL|FHLeBTDpSBdY@#eVk#=j^D2Tv>qT+zS$r6>aK zIT@*{$APaPTGQgUd@I57CY0TqpyzB@$`<>&(uPyrpgno{wiKZKd)@dFE~Ei!WNSDswYk`U*;BEFIfl|f1<6D#SaAut+!RKQUvh1vq8 zNNL<2;xM-EU99Ralh-838!???`SNs>vB zjGl^6DfJ||$d4r;w4=P*M(Ey)fr8rq2C294ct@5H_HBhAwDn&hX#nmj!u8GJ(;FYH z9C*E0jiXeQ(F+p=;GS+u5ekn>r>cCgCX#XyOpbD7*q#o(+#0UR~ta>WAt%mB`udmAXFbr5K-*$>r-pcW~xz>r=H ztnVO$jL^%ErZ~Bp-1uUM!}2SS3=rOY`=nG66!f6bNMzk7@$KNaYnh6~)uM`RK!gb0Ei;Jcg$mg&g351} z1Fn9bB`w9-O)0AvgFGI<9aLh|mm47gUkSmkYz~~C{{tut`ArtN3ElFrNKR?G<0XkE0eTtE`zt&q?ad46Wgxm5>7uVpz%{V#QeG)L|Z0|x|CUDjvEt~|^gU{FNOmYAiCE?=LLrq4k zDThFi?j^P2oa2l;ZM?&;112FiC>_BS75sW1XmcC}gFL!jTZFkBEf3Esf~RD)f{0B= z381n=6BJVOKSf4j6Ri^K>%RiT28jS0nwAg2XEhlg4NfAj7aNqsQLqz4mJ6s1iU<{B z`A{+1uI8}Kgl@;=vGj?dssvn63EZxEQV9iyCnX359+S$6J2*;2V@)E2CNz+;dtq}A zlN}OUs*Zzg6Cf@DL6IO(k^X^5i4#t#YVhh1Hh2f`096CHaTY@xpbsm zb+qK{WoIw}PKJe2Z4s6iKz3FUTW*8C0S73{cJe)2hfja3l!LSlU?_*jkV*$R)ltn# zAhf)h0&yJ|uOvdS9`*?`K{W6)O9t^rUQ!K+rMGc_?@&T~r4w8KqHGX=Z%U)ETFi05 z(@a8KI!P*n{2Ou*SBeU3!2$w9%{Xdcs^)Ap6S;NRA*9S93>gEs`vfs{M>7^c&N1v; zT3hJ}+7!H}jKL&zI~T;LD=_KR#4&^ipC=v%_?h=nHQqR}Erkf_6-cp#IC@8l8JZ)J zfSSiP-WgLWQ*Rm|g0(3u3UB=Q7 zW1CIorC4^BBO_%cUHLXYa%n-32+E5o9ME?I1rbX(RZlZ=LG=YZ40RU}f1IflB8mZs zf@=j8hc-|Ge;j-Tl4-%;l|l$)Qag?pfjadTz63^%`lu4(uz6IeH|{-xDV3}N&Hf58+FG-2i;)?#@qzNn6cKCR`%`jiFD! zLG4vD6=rIJOAM*Rv8)jQV^9WjZ(RYP&@qfM`w;r!7`=*zpYTL>;z(%^-fy%mRnXX7 zAhi?crYivJ$)71Zmpo;?2gBjl^C5ZCUEc?r-=8OP5O++zNJCN=wPV=MwUv^4K|C;J z01;Hu;2XdrNGCBR;DpU^@jeF6@_$N2d12RkO5jD#SSLm+^<1=f_&AUVXs*-?gBKEp z4sAFmr&fq<*DLEVu>!5NW%OIhE0hqF@8Zz7PD44p@uFqLsd(>Wwvp>9*m;(niU}%& z-4^>nw3Z)*o-m=Smls0Pn7tSbpc(xLKGSJ|3L6~%P(ZY_>W2W8J5K&uZYL;p5X1u8 zCUAJ)x+GMa2x_k%NLO$u13gMIG5Yy!T&zQx>ZdVuyeeN2S;DyKE07avs zTD}Z2O5PlZI%sW43f%6V%s0cOwh`4fg8uAjsN(Xh4^FUaaB@oyt;Y|YS_$OFd>MFP z;19J7z~=eE7wb5qe=WI zz}Wg7DjBdG1%`fqfkJ-xr5e^jC)%2XMD%bT%S=$`Lolg!j{=l6Nx`^pqi7Ley*1NP zN!J(4aQ93GmLUnC9CX7wMMfb1)!OmP%Z3_)I=+$W@U!$vA?`7q;ej2EO*%dHz7Lac z27yiUne-Vgd1ho=@u0>c0_`3yM~)3^nbn#yEj&~)hXMJPS1?7z2k*SJl`nwG;PpP0 z5c>@Uk3$2s0At6*4k9J7KY60i5ZR2ML31+s!}5A!TMz?Vvik1^d}uli0Tt`Zqu6qy zbKj}f5W(STOxj8kcKvY1 zUrH#KFV2prl;Aa=Ogcihy3H4Iuw*{p2I0NvD`f>b9r*_+Afta1Rw<$9?17xL%MiX3 zbQJ#rQudu4DF+AADiw_vHNXQ(vw$PM6iVIDila0fyuy$II~y}i0jS(gDa?dkNQra= zN%h-AE`rj>0|S#S~*-d!cYXZ--bOw}aAP5hYTVO9++==l!1nY}xk2wuG>g(mW3 z=0yl?N{1v=KH+_ejW`aTUjDXb^- zlMdxZg7kJHScIOVgPb6z85Df<=l3af#C>)@TgkQg>Wf%P;uz`!9$`v@@pQ*5jv05J zpiRJs1_H9_+Du4d8oH!_r%wJM}rHk-cxDBsoCWcrbz;sfKA^Gm?>eiN{)35 zaN!LGxMx~li0o3Ty;xS^O@43JImnjOUe%z{ca9&J=a5u`j1Ye?Qo zQ=t(G)(~w2XuSFzKrx_;R)=@@qHMl++o!P(8wX4~XKQnwy|VD=Us7ZLW@ir?2Y4 zCruzecZS-{$c6BKs_iH}SRtVayOf}eU!*p$Gzee6mnoRgm-CR3!ON>}oe~M&-xboT ztDzwFhg?WkSA79hq;`a`fV|oQd0ohps&P>UFq|fla&fS0D|o+70*48{l?YFKL}hUB z%R12PwaLIcC%-6Y;-1}B59x=!MNqku=r(>$F%!9l@XgR7IQXL6hS94a2rP}ps07G3 zvlRExfM+I~0UGGV#^NZ(tPr3hAzr-!vG%++0zwToZLdUFQ^SF+nC;Q==Ey-sOToXp-@|`|hx@qTwkXwzO&e(HA8@3Xf zN>}(*Er~5+GC#Eyu}#^_gd?_|?*bc7gcpi>;{GKP;;jxsi3U!1z0$_j}O0&OD+*} zp@uv}C-_ERa_h-7wwv_7JAm!rHoCXCgry_dx-cMsPSavw>#fUDHiEGJokuef2^ni? z=yFp^KWM8_YJY&^jcT(cuU(kFwhr^=FeSQBN>x#isF-S?QB$lY)^q(?MZnS*!OBq8 z*tyW8&}wjtC449JYtS?kuzXj_2=Ce=4WR0(g9aW0HmZhTbh_9H6w?&)EOd`ACs2h% zz#9*2YzV67p#|WX`IjhL2+r+8>FrQ8bHO=lEL2qp8QiBkz~IMh)^C>4Ezxb6( z4S?6ol>%THlMH8X1ON3+hSX9MY2sn$-&!kV8CoMW$SdXG*pQZ4b4_NbvI-GF@X`nh z=x|OAmb7AmooxaoYYMLwrBQfBEC=2f>pw!RW$poWD{m#Z&(m&{n~$w?C~I^4m?=79 zno#aQe5(TLwDfDGCs+_Y{;DdM5V`Lneu59tT}3QR7u(y5?QH4?>LuN4pcEOP*g?a3GFF62frU^ za^YUTo9f}ci2+Ptt25QXd*fmm9y;4Z<91Vk>ypM~Fzx;`96o|R%;r3k4jMX;%O_5x zj6V3*Rg)ceQv*$`Ji&StzSa2Mn5YD8FXGi8Y`=qRCiZ=tqx!4Sx6H!@>k03jk|xL zkPn{S9Lz`i{z$nwnDd)FRwU3TEMa5($aEG*k<*E4AGt zKyyu8B`}t{{ZG|a;+U}vrq8{4fn7(!!~3w^I9W;&KAHUabYTX0KOLzMq#w01Xkn>r z(2WI-1*|ehN3yC28d;QtkFUo8t(83m@b~he1ipAw89ev;Es>odRUJqa+*dDk;S)E2 zA=NKL5@= z0P{G|@g0{zxi=&K<^C|y&XKclpHhP~r@t0j;mZOJ z9PO)SIu<_Qa#f|!@FJv~4~vj#@LCzGkAoB77>Y+>-3jQI;Dnx(oWeE^^zKkDWe>$( z{flAcW^b9CI{GL~DcwSWQ%fwxE@;)LWO#00l@c-t%GeAFo#J|2F-Jw9txzn%&LV>z z3aV1d9?ZOQF~I)M9Z*H#HM76~)}avcZ>)!w#40uO3gN_2$_n3ZfzAXLt}iqa$2%q8 z2>WongmFlOilTQpA>hgv4*-V~ z#_7AH&?KSvJ-DH{Xj6b{*Y{yVS~_byc=V^$!>ggsawpTEAytEx@dfZA#1%)C!kfzn z93z%Js)eMl570NVch#oiG7n%N=-1l(&{K-nl%S0#fwlG`X$EYZDI)O}jtmR(YHe6~ z9^4YzxfyydTzUiYDrr-ou#KtATIoNOgJiYMA*nw5CIx&i|1ajfP3h=Rh;_WnOviTP z54)g^_0;t{L{>@lA1Osdp0owrNNGP(Cv24*MGhony9hrfL}BI!kC9lr6pI)flhI%FYbLf{0bEZN{InZKwqAZZaf zpyB&#p#xe0=b6u|k{F*9#%a~Kt{>Cuptsf9h;37=6gS=>QaA~{?2^Jx)ZH5ZT=e=f zDPTN|5^%6Iv(}AoFB9nz5%!t`YINg#MZL^@Xw&Rygpj<#JT^K21-RP>yl4;KZ2R|{ zfFL$P%&Xz(Z=Vp-%#l+Fh~s};{q~i>I_mu_@9*CV^oB>#$Wu-ue+OzTmwWizk!Kf+ ztaGkDD&c%kmCLi+DVFbS^ZAgPgvLGZvzjb)oo`X^YTOq(ep$R6AJ1rGKfz<3QJK?< zI%|xLdhBO5=ClzVubae&=u z2%i$YEUD@-Rq8Z!n16QJxcbM<93)qk8?DcuD0m`pDswxnIm?afaz5}X9ouC`gwM3Z z^Fg;Av5|)l`lQW0AN&Z#MU_SPrmsF9@?0L*n=*q|OVbb*YG0ku`8~o6dn35-U2bJv(qp zmy*CMb1OP;VGT-+=^S)@bw!t5(SxQXmIU3}E9P5Lf10iz*JwkPb4uiB+n|{<<^dv%=5OY<tnK48YvZEBhOJufUl^8B96up!xQFY;&ZwJG zzq5|vTRcV-#dHlDR&YU|xU1iY-HAuSMjp8^q9eMt$IBs6mk$_OvTek^8P%3CzlDuD zaW~*VX7!%&taj>iLDa##l)aNe+l{`EM3qc*g-`A6opf#0t;0nl+D{+rJ?74JYUa`M zeQ66{j&Tp`S6bG!Lwdo*eSP&9W!rU9QRjt(=+e%g$LmK zpW{EjyZtkwWLZA>8g}QZvxjMWj&#O^iyHO$RJVO;^rcuoOI4XLd z+y$MY%8m$U>rKTVfhasPg}J;UKzM7eRJ5*YAU6>m$@e0dOoCxDmZ>g zdu5{K=cu6_(k7gKIiceZcki|M>%{ZZzh`w^^f-9SIp}JS=JGyisKnsUxL| z4)d=q8;>Um%8N`9VflQyrfP>+QPFAr+x*lSF+n$Lwsbvo@TZsQPlB7_U!pF|UOsp4 z_U6AEf9dsN_KHQXwzvFBoN}*pb58h<&?Y8lOj!EL{24o1x8zhR2c)lB-DZTSOcHBIHSTc zF*%d&6&*Ds^VYAM|4I((6Id{0@f(Y}A%x!hsdmVa&rNNtBOBz62e`6>-rLBaqJGUT zxN>{E-Ze)P@6P-!$bdF-ES6Cw0-#IKX2^n%bu2C z=#iN0ccdt`ci1q??so5_^NKG{oHl&Zr^KSz5xa*MP8+c=bHv^$Ble7`o;K?ArxEtt z5ql?zrjNdyIr8w%5&Nd6Ods4?s_2eLA&vPzqtLgN2EQw zdH4jq_w=gsts)QRjSZg^{IcqoevyY(Z3<6mH~r4ViIFAiAB0cs`SQ-@#nj;qnNw5s z;)9z%%t)K_GBEYIIO5v!HHQnkzSa)ikhHaU{*k=}_gP6V@7^BAKYGxxamLj6F%w7c zKDy@R>Y20R2i$))|HvEfqO^H?x^H>C=Gf^EuV-ZiC;#TVR$p4)HSOy1WyyQR0k*lS z{po8j-hbBP*rZ399p-Lt_n>yz+A(NfTBG{;5iiHBMZK!^ z%Ikghq&!T!!}fHiKR)rQIxp+RMU8KX^_PLqI&JuPDRqstEVH8eLcyrned9~kXGNO2 zmK?vF_TwK%lf0fsU0ir&?*2I+Up3tC`K0^R%!i$~{Qc^A-$p%L*)6(kH4RVg-!kZ$ zY2^EDfe%vS`UYKJx#s;2=~yk>Rn6XT=zU?tCcSphtjw7k*C=<5s?i!21>LydHLvZ= zoZz7gS{W=StBO=(rw!i{bThbk`5f1H_vD9%zL>dm(5s2Te^)sNA3e18@(d4wW+G0V zU$k*h!p{-zGu__b{i9@S^O@7;UkxuCSX zcUt<|d-tEmc7x>d+n;55pSJMhi=%xye*ZDXi$2WnLxTJE{(e5TZz!DW`?makzP+yq z&MW)2)qne$NhtHH1{B~i5Dv`mUf>8naPj|-^fodl6fTpHe^SMxGCttn{Q18g zV9Akp2Kh?m(ck6$BA38<+vxWHoR^G_?!f$x#n`_EKPQx0jwve^pJ9o~|M3SomOe27 z9CL+Vpl6^MM)Bs#S%ZnVw+`oOlQvCmmc5m)3HI8r!juam^CbFGfQmt z6yLXaD5M-~1?&5mE{ZVb{x%l1nDutM z@jv$&DpP713V~Ld3`JB*o&99f$htcijm*oz|8Ra zK7&1f!i;$--^b>AQ0FeO#P&*-_j~0U}n&Z5Vzw6&0zYG7GheFc^o1NfYc&;K?0(gDpGVphtrTpb|(cf=bQ;rjAFMhN4>{~dAVD`@NM{}{0#{+lom zIp49wZrVd^rade_%R5=B;`toc>VJ*@M|>Mb=KU<{C`)`M+e4h4?P2K<-GUhwSajh# ekQf_NxsMoYiV0<3QlcA}<4HEb57d~SzWpy-BEAU# 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 index ecc048b..c23acae 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:29Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:38:24Z" }, "call": [ { @@ -177,7 +177,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "b89cda3bb794448abf06b56c955d754e" + "x-dfo-trace-id": "27d2f0b694144799a0314850fb5d29bc" }, "json": { "schema_version": 1, @@ -584,7 +584,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -614,7 +614,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -630,7 +630,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -713,7 +713,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -725,7 +726,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -737,7 +739,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -749,7 +752,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -761,7 +765,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -773,7 +778,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -785,7 +791,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -797,7 +804,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -809,7 +817,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -821,7 +830,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -833,7 +843,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -845,7 +856,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -857,7 +869,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -869,7 +882,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -898,7 +912,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -916,7 +930,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "cf3f86713afb44c98d21fbf9731d66e3" + "x-dfo-trace-id": "b00bcf5bd0ca432eac38be0de17b99ad" } } }, 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 index 2e809f4..bc1a7a6 100644 --- 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 @@ -176,7 +176,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "b89cda3bb794448abf06b56c955d754e" + "x-dfo-trace-id": "27d2f0b694144799a0314850fb5d29bc" }, "json": { "schema_version": 1, @@ -518,7 +518,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -548,7 +548,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -564,7 +564,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -647,7 +647,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -659,7 +660,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -671,7 +673,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -683,7 +686,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -695,7 +699,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -707,7 +712,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -719,7 +725,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -731,7 +738,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -743,7 +751,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -755,7 +764,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -767,7 +777,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -779,7 +790,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -791,7 +803,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -803,7 +816,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -832,7 +846,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -846,7 +860,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "b89cda3bb794448abf06b56c955d754e" + "trace_id": "27d2f0b694144799a0314850fb5d29bc" } } ] 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 index ef7f6ec..a748edd 100644 --- 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 @@ -176,7 +176,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "b89cda3bb794448abf06b56c955d754e" + "x-dfo-trace-id": "27d2f0b694144799a0314850fb5d29bc" }, "json": { "schema_version": 1, @@ -582,7 +582,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -612,7 +612,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -628,7 +628,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -711,7 +711,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -723,7 +724,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -735,7 +737,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -747,7 +750,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -759,7 +763,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -771,7 +776,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -783,7 +789,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -795,7 +802,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -807,7 +815,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -819,7 +828,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -831,7 +841,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -843,7 +854,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -855,7 +867,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -867,7 +880,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -896,7 +910,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -910,7 +924,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "b89cda3bb794448abf06b56c955d754e" + "trace_id": "27d2f0b694144799a0314850fb5d29bc" } } ] 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 index 69f12eb..bf5a761 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:13Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:37:41Z" }, "call": [ { @@ -184,7 +184,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "250fbb95951e4a8c8d847cbcde0ae4f9" + "x-dfo-trace-id": "a746de54b70e40c696df4f9f2e711908" }, "json": { "schema_version": 1, @@ -590,8 +590,8 @@ "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", - "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -621,7 +621,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -637,7 +637,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -720,7 +720,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -732,7 +733,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -744,7 +746,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -756,7 +759,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -768,7 +772,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -780,7 +785,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -792,7 +798,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -804,7 +811,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -816,7 +824,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -828,7 +837,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -840,7 +850,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -852,7 +863,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -864,7 +876,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -876,7 +889,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -905,7 +919,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -999,7 +1013,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "ff646392059e46e68f83a2753e921d6a" + "x-dfo-trace-id": "203e162341304fd082ccc7499fd37070" }, "json": { "schema_version": 1, @@ -1008,11 +1022,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "ff646392059e46e68f83a2753e921d6a", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "203e162341304fd082ccc7499fd37070", "warnings": [], "timing_ms": { - "total": 1, + "total": 173, "by_step": { "coverage": 0 } @@ -1025,9 +1039,39 @@ "variable_text": "dataset", "warnings": [], "timing_ms": { - "total": 0, + "total": 140, "by_step": { - "response_cache_part_memo": 0 + "validate": 4, + "phase_validate": 0, + "walk": 13, + "reread_arcs": 0, + "phase_reread_arcs": 0, + "detect_edits": 1, + "phase_detect_edits": 0, + "resolve_survivors": 0, + "phase_resolve_survivors": 0, + "shape": 4, + "phase_build_shape": 0, + "bind": 0, + "phase_build_bindings": 0, + "where_places": 1, + "phase_where_places": 0, + "materialise": 16, + "phase_materialise": 0, + "ground_related": 0, + "ground_units": 0, + "ground_facets": 0, + "ground_convert": 0, + "answer": 47, + "ground_gates": 4, + "phase_ground_build": 46, + "finalize_preview": 0, + "options": 2, + "finalize_related": 0, + "finalize_wholes": 0, + "finalize_relaunch": 1, + "phase_finalize": 0, + "served_entry": 1 } }, "entity_refs": [], @@ -1461,7 +1505,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -1519,7 +1563,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1331, + "member_count": 1337, "served_rows": 4, "served_rows_exact": true } @@ -1588,7 +1632,7 @@ }, "relation": "child", "parent": "CRSTypeOfFinance100", - "member_count": 12672, + "member_count": 12745, "served_rows": 4, "served_rows_exact": true } @@ -1615,7 +1659,7 @@ "value_kind": "enum_value" }, "relation": "root", - "member_count": 14098, + "member_count": 14146, "served_rows": 4, "served_rows_exact": true } @@ -2026,7 +2070,7 @@ "start_year": 2020, "end_year": 2023 }, - "capability_version": "cap_765c9d2a0c7529b9" + "capability_version": "cap_4913302d7a6b6435" }, "confidence": "high", "available_at_place": true, @@ -2287,6 +2331,8 @@ } } ], + "concept_label": "basic health care", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsCooperationModality", @@ -4525,7 +4571,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "6a74097c16e04e21857031860d5c9de1" + "x-dfo-trace-id": "2d6a661d4c9a474b980ad239a19f5329" } } }, 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 index 919f817..5a4faf9 100644 --- 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 @@ -11,10 +11,10 @@ { "op": "fetch", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -49,7 +49,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -226,12 +226,12 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -239,7 +239,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -255,10 +256,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -293,7 +294,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -470,7 +471,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -486,15 +487,15 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry-after": "2", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 } } @@ -503,20 +504,20 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "6185b86217ef499bb5b6932299df1207" + "x-dfo-trace-id": "55b37040b90c4b51bb1432fb7f565e8d" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "failed", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 }, "error": { @@ -540,10 +541,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -578,7 +579,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -755,7 +756,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -771,15 +772,15 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry-after": "2", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 } } @@ -788,24 +789,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "6185b86217ef499bb5b6932299df1207" + "x-dfo-trace-id": "55b37040b90c4b51bb1432fb7f565e8d" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { "rows_written": 0, - "estimate_rows": 107252 + "estimate_rows": 107148 } } } @@ -814,24 +815,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "1ebea3ca2d15409c953cd716bdc1fccf" + "x-dfo-trace-id": "76621ada279a42da9405c03760d3fa30" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 61927, - "estimate_rows": 107252 + "rows_written": 50967, + "estimate_rows": 107148 } } } @@ -840,24 +841,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "94bb5a8a7c2041969d9a9118b75dc4aa" + "x-dfo-trace-id": "f489220d020f40cabbd29c2e1d57a188" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -866,24 +867,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c78757a54b9f4b6786a784f8a47ad5b4" + "x-dfo-trace-id": "9855026593bc4f158bc5bcdea3bd1809" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 1784, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 1797, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -892,24 +893,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "914bfd57942740b893ba9ca1b4f4591b" + "x-dfo-trace-id": "119eba2f4a1b446aa13d7abc8d39a2a9" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2289, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2302, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -918,24 +919,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "217766e0425f4916a393331295c4a7e7" + "x-dfo-trace-id": "1019c2a1661647d193bda3dd1a96847a" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2934, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2919, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -944,24 +945,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c501ba8d087b4561b2ff0e423c719ab0" + "x-dfo-trace-id": "2a08d19167d845478a587fcdca1b295b" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "done" }, "manifest": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "shape": { "kind": "statvar_schema", @@ -993,7 +994,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -1174,14 +1175,14 @@ "requested_window": { "kind": "range", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } } }, - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "prepared_at": "2026-10-26T09:22:44Z", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "prepared_at": "2026-11-01T07:38:40Z", "coverage": { - "rows": 107252, + "rows": 107148, "dimensions": [ { "label": "financingProvider", @@ -1203,14 +1204,14 @@ }, { "label": "years", - "count": 58 + "count": 57 } ], "window": { "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } }, "citation": { @@ -1237,8 +1238,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1960-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -1249,8 +1250,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Standardise providers and recipients", @@ -1270,13 +1271,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -1329,39 +1340,39 @@ "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 }, "graph_revision": null, "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-24T19:20:27Z", - "content_hash": "3d946d8f4986dbbe0fa3e5c4c917200381f529d89ce417c11daeb22df56eed99", + "exported_at": "2026-11-01T03:08:18Z", + "content_hash": "a1bde3be8710f5ba073e52aaaba73cf9156079c273c874372f54bb07a81b0f94", "graph_endpoint": "graph_release" }, "source_revisions": [ { "source": "provenance/OECDDAC2A", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_76f5fa7244511c58", - "materialiser_build": "d80df9f5fd598b7345255470932d202ee5d49942", + "capability_version": "dset_5282a0674178a233", + "materialiser_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" ], - "observation_count": 107252 + "observation_count": 107148 } ], "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261026T000018Z-0af2cac5", + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", "served_from": "materialise", - "confirmed_at": "2026-10-26T09:22:46.854499+00:00" + "confirmed_at": "2026-11-01T07:38:43.335353+00:00" }, "warnings": [], "diagnostics": [ @@ -1373,34 +1384,34 @@ ], "artifacts": [ { - "artifact_digest": "sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", + "artifact_digest": "sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", "rendering": { "bundle": false, "format": "parquet", "layout": 4 }, - "bytes": 466531, + "bytes": 469908, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231", + "artifact_digest": "sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2", "rendering": { "statistics": "series" }, - "bytes": 144985, + "bytes": 147458, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2" } ], - "series_count": 3656, + "series_count": 3657, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -1424,7 +1435,7 @@ "name": "time_period", "kind": "grain", "droppable": false, - "distinct": 58 + "distinct": 57 }, { "name": "value", @@ -1483,7 +1494,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1495,7 +1507,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1507,7 +1520,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1519,7 +1533,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1531,7 +1546,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1543,7 +1559,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1555,7 +1572,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1567,7 +1585,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1585,7 +1604,8 @@ "label": "South Sudan" } ], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1597,7 +1617,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1609,7 +1630,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1621,7 +1643,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1633,7 +1656,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1645,7 +1669,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -1664,7 +1689,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1688,7 +1713,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1747,10 +1772,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-25T09:22:46.785219Z" + "held_until": "2026-12-01T07:38:43.261993Z" } } } @@ -1759,21 +1784,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61" + "origin_path": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted", - "x-dfo-trace-id": "22f0d88923c14d74825b5f14d41c05b8" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0758c8ebc1d44bb896d7880cc101fd6a" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -1787,7 +1812,7 @@ "expect": [ { "dataset": { - "rows": 107252, + "rows": 107148, "columns": [ "time_period", "financingProvider_label", @@ -1814,24 +1839,24 @@ "members": [ { "parts": [], - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a." + "spec_id": "spec_8d395f753219876fa459778f38499a80", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a." } ], "missing": [], "long_builds": [ { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "poll_waits": [ 1.5, 1.5, 1.5, 1.5, 1.5, - 1.784, - 2.289, - 2.934 + 1.797, + 2.302, + 2.919 ], "resubmissions": 1 } diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-party-totals-kept.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-party-totals-kept.json index 90b582d..0cc319e 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-party-totals-kept.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-party-totals-kept.json @@ -5,17 +5,17 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:22Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:38:14Z" }, "call": [ { "op": "fetch", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_b05b2b3ee21debf9e2ac3fbe03e05f94", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_b05b2b3ee21debf9e2ac3fbe03e05f94", "identity": { "identity_version": "spec1", "shape": { @@ -50,7 +50,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -232,7 +232,7 @@ } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -240,7 +240,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -266,10 +267,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_b05b2b3ee21debf9e2ac3fbe03e05f94", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_b05b2b3ee21debf9e2ac3fbe03e05f94", "identity": { "identity_version": "spec1", "shape": { @@ -304,7 +305,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -509,13 +510,13 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "7459cea38c154e609d1f2142b94f4cbe" + "x-dfo-trace-id": "f802bd2833054fbebe1769dc8f96089f" }, "json": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_73897fdfb0206fcf27c5898b353348fb", + "spec_id": "spec_e14699f9dcd167f0211081a726ae1031", "identity": { "shape": { "kind": "statvar_schema", @@ -547,7 +548,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -566,8 +567,8 @@ } } }, - "content_version": "cv_2aa4cc2fd852cd9b84347c61d07d609a", - "prepared_at": "2026-10-12T18:33:25Z", + "content_version": "cv_574e68a18917407b0f5534cfc9ff001b", + "prepared_at": "2026-10-15T09:59:06Z", "coverage": { "rows": 111, "dimensions": [ @@ -602,7 +603,7 @@ } }, "citation": { - "text": "OECD DAC2A via ONE DFO, retrieved 2026-10-12", + "text": "OECD DAC2A (2026), via the Development Finance Observatory", "sources": [ { "ref": "provenance/OECDDAC2A", @@ -705,11 +706,11 @@ "end_year": 2022, "start_year": 2022 }, - "graph_revision": "dfo-dev-dc-datacommons-service-00242-zfr", + "graph_revision": "dfo-dev-dc-datacommons-service-00249-9gv", "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-11T15:49:13Z", - "content_hash": "952a221e6d43254927fcb75abbf12ce7ba03285fbfeef7d9913e2ddcf49f904c", + "exported_at": "2026-10-13T21:51:17Z", + "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", "graph_endpoint": "https://dfo-dev-dc-datacommons-service-zms5lj4zhq-nn.a.run.app" }, "source_revisions": [ @@ -718,11 +719,11 @@ "revision": "2026-10-12" } ], - "capability_version": "dset_5c3f5b0bf4cd9569", - "materialiser_build": "cd25922ac45834a7c7d0193d3b3ee3d7e9cc7b55", + "capability_version": "dset_1e6cd9546fac19e9", + "materialiser_build": "1d29a70e59f70570c5ed8d610ec83291c8eb6f54", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" @@ -731,11 +732,11 @@ } ], "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261012T163104Z-67f98b87", + "origin_catalogue_build_id": "20261013T114555Z-613cf5c2", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:21.103020+00:00" + "confirmed_at": "2026-11-01T07:38:10.731097+00:00" }, "warnings": [], "diagnostics": [ @@ -747,34 +748,34 @@ ], "artifacts": [ { - "artifact_digest": "sha256:05d0cbf59e8dddd7162104bf8e2edc406fc402a0b8d0d971452d01b07b0ee426", + "artifact_digest": "sha256:7ef1038eb25d978077bb4f5b9c54e940052ccd2aedd3284e6fb9739f1deca1f4", "rendering": { "bundle": false, "format": "parquet", "layout": 4 }, - "bytes": 10932, + "bytes": 10911, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-25T13:51:32.998697+00:00", + "created_at": "2026-11-01T07:38:12.547249+00:00", "tier": "working", - "url": "/api/datasets/spec_73897fdfb0206fcf27c5898b353348fb/cv_2aa4cc2fd852cd9b84347c61d07d609a/files/sha256:05d0cbf59e8dddd7162104bf8e2edc406fc402a0b8d0d971452d01b07b0ee426", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_e14699f9dcd167f0211081a726ae1031/cv_574e68a18917407b0f5534cfc9ff001b/files/sha256:7ef1038eb25d978077bb4f5b9c54e940052ccd2aedd3284e6fb9739f1deca1f4", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:8682dea270c469411916b6758279fdda0f4c989dac40b35509802141c8f7de22", + "artifact_digest": "sha256:3bb5d3b2b26768e57c233ccc76a2b1c79fdb7c916d105a2dbfd6a25646efd3c9", "rendering": { "statistics": "series" }, - "bytes": 10113, + "bytes": 10059, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-12T18:21:54.977252+00:00", + "created_at": "2026-10-15T09:59:06.850277+00:00", "tier": "working", - "url": "/api/datasets/spec_73897fdfb0206fcf27c5898b353348fb/cv_2aa4cc2fd852cd9b84347c61d07d609a/files/sha256:8682dea270c469411916b6758279fdda0f4c989dac40b35509802141c8f7de22" + "url": "/api/datasets/spec_e14699f9dcd167f0211081a726ae1031/cv_574e68a18917407b0f5534cfc9ff001b/files/sha256:3bb5d3b2b26768e57c233ccc76a2b1c79fdb7c916d105a2dbfd6a25646efd3c9" } ], "series_count": 111, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -899,7 +900,8 @@ "label": "Conrad N. Hilton Foundation" } ], - "truncated": true + "truncated": true, + "in_long_layout": false }, { "column": "financingProvider", @@ -953,7 +955,8 @@ "label": "Conrad N. Hilton Foundation" } ], - "truncated": true + "truncated": true, + "in_long_layout": false }, { "column": "financingProvider", @@ -965,7 +968,8 @@ "covered": 111 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -977,7 +981,8 @@ "covered": 111 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -989,7 +994,8 @@ "covered": 111 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1001,7 +1007,8 @@ "covered": 111 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1013,7 +1020,8 @@ "covered": 111 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1025,7 +1033,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1037,7 +1046,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1049,7 +1059,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1061,7 +1072,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1073,7 +1085,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1085,7 +1098,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1097,7 +1111,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -1126,7 +1141,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": true } @@ -1176,7 +1191,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -1203,7 +1218,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "ccdbf2ec39f8429ab9c3b8b0f3bb1a92" + "x-dfo-trace-id": "a5753a06386f4de3874484b22fda6f84" }, "json": { "schema_version": 1, @@ -1212,11 +1227,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "ccdbf2ec39f8429ab9c3b8b0f3bb1a92", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "a5753a06386f4de3874484b22fda6f84", "warnings": [], "timing_ms": { - "total": 2, + "total": 4, "by_step": { "coverage": 0 } @@ -1237,7 +1252,7 @@ "code": "whole_total_available", "severity": "info", "message": "The source publishes the total of every official donor as official donors (DAC); a sum of the listed donors includes private donors and differs from it.", - "spec_id": "spec_73897fdfb0206fcf27c5898b353348fb", + "spec_id": "spec_e14699f9dcd167f0211081a726ae1031", "params": { "total": "DACOfficialDonors", "total_label": "official donors (DAC)", @@ -1246,9 +1261,10 @@ } ], "timing_ms": { - "total": 0, + "total": 1, "by_step": { - "response_cache_part_memo": 0 + "response_cache_part_memo": 0, + "served_entry": 1 } }, "entity_refs": [], @@ -1264,10 +1280,10 @@ ], "status": "definite", "spec": { - "spec_id": "spec_73897fdfb0206fcf27c5898b353348fb", + "spec_id": "spec_e14699f9dcd167f0211081a726ae1031", "definition": { "schema_version": 1, - "spec_id": "spec_73897fdfb0206fcf27c5898b353348fb", + "spec_id": "spec_e14699f9dcd167f0211081a726ae1031", "identity": { "identity_version": "spec1", "shape": { @@ -1302,7 +1318,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -1321,7 +1337,7 @@ "resolved": { "shape": { "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", - "label": "gross disbursements (official development assistance)", + "label": "net disbursements (official development assistance)", "population_type": { "ref": "FinancialFlow", "label": "financial flow" @@ -1386,7 +1402,7 @@ } ], "member_count": 1, - "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "refine_supported": true, "data_commons": [ { @@ -1451,8 +1467,8 @@ "kind": "value", "value": { "ref": { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" }, "value_kind": "enum_value" } @@ -1618,7 +1634,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -1664,60 +1680,47 @@ "relation": "child", "parent": "DAC2aAidType206", "member_count": 2, - "served_rows": 27, + "served_rows": 32, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType201", - "label": "ODA grant" + "ref": "DAC2aAidType219", + "label": "recovery on ODA grants and capital subscriptions" }, "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": 45, + "served_rows": 26, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType213", - "label": "developmental food aid" + "ref": "DAC2aAidType209", + "label": "interest received on ODA lending" }, "value_kind": "enum_value" }, "relation": "root", "member_count": 1, - "served_rows": 15, + "served_rows": 14, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType216", - "label": "humanitarian aid" + "ref": "DAC2aAidType250", + "label": "official development assistance excluding debt relief" }, "value_kind": "enum_value" }, "relation": "root", "member_count": 1, - "served_rows": 42, + "served_rows": 111, "served_rows_exact": true } ], @@ -1767,11 +1770,11 @@ "source": "observed" } ], - "rendered_sentence": "Gross disbursements to Kenya from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a.", + "rendered_sentence": "Net disbursements to Kenya from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a.", "sentence_plan": [ { "kind": "slot", - "text": "Gross disbursements", + "text": "Net disbursements", "axis": "what", "segment": "heading", "entity_refs": [], @@ -2010,8 +2013,8 @@ "binding_kind": "value", "refs": [ { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" } ], "provenance": "binder" @@ -2067,7 +2070,7 @@ "start_year": 2022, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9" + "capability_version": "cap_4913302d7a6b6435" }, "confidence": "high", "available_at_place": true, @@ -2075,7 +2078,7 @@ { "definition": { "schema_version": 1, - "spec_id": "spec_e14699f9dcd167f0211081a726ae1031", + "spec_id": "spec_73897fdfb0206fcf27c5898b353348fb", "identity": { "identity_version": "spec1", "shape": { @@ -2110,7 +2113,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Net" + "ref": "Gross" } } ], @@ -2126,7 +2129,7 @@ } } }, - "label": "net disbursements", + "label": "gross disbursements", "axis": "what", "measure_axis_values": [ { @@ -2160,8 +2163,8 @@ { "axis": "nettingBasis", "value": { - "ref": "Net", - "label": "net" + "ref": "Gross", + "label": "gross" } } ], @@ -2169,7 +2172,7 @@ "served_rows_exact": true } ], - "measure_label": "gross disbursements", + "measure_label": "net disbursements", "measure_label_axes": [ "populationType", "measuredProperty", @@ -2209,16 +2212,19 @@ { "axis": "nettingBasis", "value": { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" } } ], + "concept_label": "official development assistance", + "published_tables": "OECD DAC2a", "role_axis_facts": [ { "role": "origin", "member_count": 96, - "members_available": true + "members_available": true, + "holds_multilaterals": true } ], "unit_conversion": { @@ -4172,11 +4178,11 @@ } } ], - "rendered_sentence": "Gross disbursements to Kenya from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a. Assumed: every provider.", + "rendered_sentence": "Net disbursements to Kenya from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a. Assumed: every provider.", "sentence_plan": [ { "kind": "slot", - "text": "Gross disbursements", + "text": "Net disbursements", "axis": "what", "segment": "heading", "entity_refs": [], @@ -4393,21 +4399,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_73897fdfb0206fcf27c5898b353348fb/cv_2aa4cc2fd852cd9b84347c61d07d609a/files/sha256:05d0cbf59e8dddd7162104bf8e2edc406fc402a0b8d0d971452d01b07b0ee426" + "origin_path": "/api/datasets/spec_e14699f9dcd167f0211081a726ae1031/cv_574e68a18917407b0f5534cfc9ff001b/files/sha256:7ef1038eb25d978077bb4f5b9c54e940052ccd2aedd3284e6fb9739f1deca1f4" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A05d0cbf59e8dddd7162104bf8e2edc406fc402a0b8d0d971452d01b07b0ee426?X-Goog-Signature=redacted", - "x-dfo-trace-id": "3c0742cfbe724089ab0e8e2a15bfa9ce" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A7ef1038eb25d978077bb4f5b9c54e940052ccd2aedd3284e6fb9739f1deca1f4?X-Goog-Signature=redacted", + "x-dfo-trace-id": "3161b93c0e844e15934681b0752bdaa3" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A05d0cbf59e8dddd7162104bf8e2edc406fc402a0b8d0d971452d01b07b0ee426?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A7ef1038eb25d978077bb4f5b9c54e940052ccd2aedd3284e6fb9739f1deca1f4?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -4448,9 +4454,9 @@ "members": [ { "parts": [], - "spec_id": "spec_73897fdfb0206fcf27c5898b353348fb", - "content_version": "cv_2aa4cc2fd852cd9b84347c61d07d609a", - "sentence": "Gross disbursements to Kenya from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a." + "spec_id": "spec_e14699f9dcd167f0211081a726ae1031", + "content_version": "cv_574e68a18917407b0f5534cfc9ff001b", + "sentence": "Net disbursements to Kenya from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a." } ], "missing": [] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-party-totals-kept.parquet b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-party-totals-kept.parquet index e39f858b5658b9f7f4f705a42de73e39f3307846..1bab295a3f3b9c34bfc7d08fe32b59411a0761c6 100644 GIT binary patch delta 1154 zcma)6e@v8R9Dm;PedKxV72iAVy*s+&cmeN$Ys${tm}VJwf*f?(X+i2#?jQ!0uEeLnB^ z*XQ%Rd;1Gd6k7f6o$F*?Zsz1R&L`_+WI$-^LaqlP#44;0FWX*L!``+!juaa?&wT`a z;N&=c?;Cw6w!$Zma!Va1mfN5K>YB-Nb3{}IZ)bCa9I7k85;@+Vj|u5q*bQ-bVXZ)T zL#dWidGcid^z*M@Jc0|0;XlOq7xeZf5dO|FxZ z0J^n9u~UHG))@N$)WBa)0la^r;s}7Ja&ZU%p|M4-Q+)ijg%4O&f}EaX7dn6rcnT_E zKa}ji!{SX{We+F$)bFA>Fj?*T%zT-hN-%FH>ZkpJg}ijvfh|NWyTw^VFQZ>WDusdZqn?w#aIHM#mX~G-$(C7IUe&b_;pA6V^ zut-Fm0w)N%X2c!hM2X=QP7+(Ehw4C^LhH*kkK@oW=F9e>C^NTUwPGy$pV#gBShKG1Bnc3mQ4stH8EKw^M7s?Qji% zu05?wJ0^y_R^Bq?kp>1o{Sq4(S@!(PJAZK3U~#eRsN$ffVG z_~dFll1Jyawi&$a`(zKknoq;|EM&-pGCliBiDyB@ynb;dZ7ia51-Ab$k6lSJLVY^^ zcsHHi#b%WtKfi~DnLnk%aBeSc+N84m|pL6x=%gHf4LfVh#9~qQeKmY&$ delta 1153 zcmb7Ee@v8R9DiQ+Jn+2pRo}brJuWzpmpgen)EG#kj1BG(28h+A36dFiC`v6uk({vB zy)!T-%nqKGgo`fzXsohGpg}r1h_w=D2Fn2|xlzL84F0e>ov^-dTU%|dt@oeL`~C5L zKcDaCeV_Ne9lbl^J??F33RVJw^0u&5iBgaep@PNyT!avRKR%A+S63ZA-125p%Wjj9 z`}Yj{XPER^WW*44as?kWn*C1o{9PAJkcWofATplm6DbWYmJ*p>UVK=j*tkcal6PI= z0RZ&l?acz+>gvp_bR*DCi_Z5Nbu2t0widci&@s^)}nLL$iAP zo4EX`TcGrIT#q2roePuXsO0jWYG@T?sif)P_c{T(dQS*S{T&|%L5l{0B&6EyAm;j` zB~TBoH?;vAtca=x&<3)$0A!rwAAu_E;#@A!gm%>xkLh%wmh@VvqLH!ngi@8v3YC)D zFTMuDUR+9olveS(V9AzHK}rmfosRF)^`}t1=zyAcd|pr`t+vt)?axdZAT>8p1mo`C zoIM3Qpw=!im0E6=bJ3LL*R|ZbkfXD?-zg@b^Ujn@=)zh(NtLwT>TSeA)kC)g3)Svd z5SJ7>(ohO1?~IvH>>nt!;7yN<9z5Iu`)Z@VJWEtOZX#{cjdJ4wFvs)4_%WTr93@(7u$H;HmziYp0>mwmf`7uWNIcz*%(U8xNQt zYFH3=(r~v5eaPfah6cIrtr~!_xY#qWpKRDq8YR@xnx=Q4t7l084K_X~%GlQpZzdFz zY@wrlKG?|1+x?=KM(Q8ZJD2jZ!KzT~5=q7K-Q=S**!(j%D4ojyJLT^1ab1e%5F&I# zO=rAr_-N}_!)^sBR|MsnutAv?6j_N@qOBJC*QcZ3!R70AnUV8fvIcHnozkt<(o@O_5*=i%ltSpH6$`}VPwmwM)GucHOpI@~JA|t!JAc7Pt?kg~4j$j>z{Y%q#Wi0n z0*7iJT!JU8mA9l?HI3);n0a222K8slbj)P!&)Kz@vA)y>s<7nr4$4?&dbz}iy(MRj zo!<*#o2zuy;psC}A?7iv$Ve+J6wVLdZx9|I`lN(_CSzkv0P+Vn3V3OW!RI!Ag%SH_ z6f4a9IVEXq&zm3?!Dj0#tjQ=6UMNy6yRlNo8B%;rGFj8@C&FMJYSXC;ZrW6qc_Kxa z^ZPoOvaQwxuPr|r;?z&qi!=S=K29)X#%T#NQwO9D*lb_gSx!2C4-J!w52Pp?_FAw@ zPMeP#MS1A9gC^yPX8S%tq4)36BZ8#Hpt=kARk7m&#w`x-L^t%w;{0_EgU zJMCo%ouwVJc8SIXzsc&|-{hjq$uXRi(ZTCckulx<{8ORqL{A5DL>+oaNZO{Zb^(@C z%ldQDk_%k|P_5NQ+ZcLqkw#eZD>rp9v}-_gHoY+9VxyOKVHY!>ej+uonfSY+b?DLV zP%ld_eM3u#G8^h($)3l;TmB=c$&sn%qoVxiXNa=m_Ol+n8XQp2t%2F4Y{+GpMyjGtt9&~PeI1tKwoa- zceg=C3qzykrFZK2aQ&S0i&jX68h8S3Xf^cuc0SVpRn8Sq8(2^K8+mpI{Oa_$V}3``~W@_#`4# delta 986 zcmaJ=ZERCj7(Qp71LvAMcRTvst-TxBaaFPmh|@VzTEH-!#G4J)g#_(J253OpSWx`I zuBO1;2y}ai&ab8+{vZUC!dxs6Niz~dSOU%w0tEsDn03sli62Nd;(Pg}#Q5tu@AG~> z?>Xn1F=_aWNaI2Wb0nzaL;A9#z(I-$ssCl=3PK2Uc)WaN=Udyh_3y9fUuUN){>jLH zn-xdz{a!>b!L$~5?AGue&}{Zqv8T$mP@$6RKP^WHAFSJCS>(!n8dfvOBPp&ia}U>4 zqL-I*Ot&o7S9??hagkDl20UG$hcHbt=f>YNR!{G|rWoSFFHBPs+LIHXhy_e2{^ z*h1Y_yUDZ5tiq9xn>mj1TP{owF*DAqRr9OPM(!4R$0T(NbEch#MRxnHU_!)hIl0cd zj|VfX_Ibr%BT1aX9GzZ^?6{q$)EjNZTX1IM_3`(u4o2k$t3%#Vh>)l=K1VPv@9v}B z$Tsya;)31oQW9dgYBOeK8m@kd0fP@ldaW!oe~zY9vi*!fHId!*v(h4_(mKWwdnAYf z+Peq35We@izC?MNZ6ohdNpfJJ6+x~XudrmDoPsgm`p0ui zWPFL$&jnhM3)Ymp#?OUhPY8|{Rl?1Z7uiTyUWKaCK9*f36Yx!G`{Gloys%2~W_h+50(upErkC?GQF%D}(E3$(@m!1SZGpnF9W1j}&OmQjNHO1bW^sYe!$V_b N@j2oH8zI(*{u>A?C=mbv 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 index 4fb6e44..365dd93 100644 --- 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 @@ -11,10 +11,10 @@ { "op": "fetch", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -49,7 +49,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -226,12 +226,12 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -239,7 +239,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -255,10 +256,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -293,7 +294,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -470,7 +471,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -486,15 +487,15 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry-after": "2", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 } } @@ -503,7 +504,7 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 404, @@ -531,7 +532,7 @@ "trace_id": "00000000000000000000000000000000", "long_builds": [ { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "poll_waits": [ 1.5 ], diff --git a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-pacing-changes.json b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-pacing-changes.json index 636e329..962fb9d 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-pacing-changes.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/fetch-spec-poll-pacing-changes.json @@ -11,10 +11,10 @@ { "op": "fetch", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -49,7 +49,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -226,12 +226,12 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -239,7 +239,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -255,10 +256,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -293,7 +294,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -470,7 +471,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -486,15 +487,15 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry-after": "2", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 } } @@ -503,24 +504,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "6185b86217ef499bb5b6932299df1207" + "x-dfo-trace-id": "55b37040b90c4b51bb1432fb7f565e8d" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 2500, "progress": { "rows_written": 0, - "estimate_rows": 107252 + "estimate_rows": 107148 } } } @@ -529,24 +530,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "1ebea3ca2d15409c953cd716bdc1fccf" + "x-dfo-trace-id": "76621ada279a42da9405c03760d3fa30" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 4000, "progress": { - "rows_written": 61927, - "estimate_rows": 107252 + "rows_written": 50967, + "estimate_rows": 107148 } } } @@ -555,24 +556,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "94bb5a8a7c2041969d9a9118b75dc4aa" + "x-dfo-trace-id": "f489220d020f40cabbd29c2e1d57a188" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1000, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -581,24 +582,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c501ba8d087b4561b2ff0e423c719ab0" + "x-dfo-trace-id": "2a08d19167d845478a587fcdca1b295b" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "done" }, "manifest": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "shape": { "kind": "statvar_schema", @@ -630,7 +631,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -811,14 +812,14 @@ "requested_window": { "kind": "range", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } } }, - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "prepared_at": "2026-10-26T09:22:44Z", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "prepared_at": "2026-11-01T07:38:40Z", "coverage": { - "rows": 107252, + "rows": 107148, "dimensions": [ { "label": "financingProvider", @@ -840,14 +841,14 @@ }, { "label": "years", - "count": 58 + "count": 57 } ], "window": { "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } }, "citation": { @@ -874,8 +875,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1960-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -886,8 +887,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Standardise providers and recipients", @@ -907,13 +908,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -966,39 +977,39 @@ "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 }, "graph_revision": null, "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-24T19:20:27Z", - "content_hash": "3d946d8f4986dbbe0fa3e5c4c917200381f529d89ce417c11daeb22df56eed99", + "exported_at": "2026-11-01T03:08:18Z", + "content_hash": "a1bde3be8710f5ba073e52aaaba73cf9156079c273c874372f54bb07a81b0f94", "graph_endpoint": "graph_release" }, "source_revisions": [ { "source": "provenance/OECDDAC2A", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_76f5fa7244511c58", - "materialiser_build": "d80df9f5fd598b7345255470932d202ee5d49942", + "capability_version": "dset_5282a0674178a233", + "materialiser_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" ], - "observation_count": 107252 + "observation_count": 107148 } ], "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261026T000018Z-0af2cac5", + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", "served_from": "materialise", - "confirmed_at": "2026-10-26T09:22:46.854499+00:00" + "confirmed_at": "2026-11-01T07:38:43.335353+00:00" }, "warnings": [], "diagnostics": [ @@ -1010,34 +1021,34 @@ ], "artifacts": [ { - "artifact_digest": "sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", + "artifact_digest": "sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", "rendering": { "bundle": false, "format": "parquet", "layout": 4 }, - "bytes": 466531, + "bytes": 469908, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231", + "artifact_digest": "sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2", "rendering": { "statistics": "series" }, - "bytes": 144985, + "bytes": 147458, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2" } ], - "series_count": 3656, + "series_count": 3657, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -1061,7 +1072,7 @@ "name": "time_period", "kind": "grain", "droppable": false, - "distinct": 58 + "distinct": 57 }, { "name": "value", @@ -1120,7 +1131,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1132,7 +1144,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1144,7 +1157,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1156,7 +1170,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1168,7 +1183,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1180,7 +1196,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1192,7 +1209,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1204,7 +1222,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1222,7 +1241,8 @@ "label": "South Sudan" } ], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1234,7 +1254,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1246,7 +1267,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1258,7 +1280,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1270,7 +1293,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1282,7 +1306,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -1301,7 +1326,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1325,7 +1350,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1384,10 +1409,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-25T09:22:46.785219Z" + "held_until": "2026-12-01T07:38:43.261993Z" } } } @@ -1396,21 +1421,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61" + "origin_path": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted", - "x-dfo-trace-id": "22f0d88923c14d74825b5f14d41c05b8" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0758c8ebc1d44bb896d7880cc101fd6a" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -1424,7 +1449,7 @@ "expect": [ { "dataset": { - "rows": 107252, + "rows": 107148, "columns": [ "time_period", "financingProvider_label", @@ -1451,15 +1476,15 @@ "members": [ { "parts": [], - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a." + "spec_id": "spec_8d395f753219876fa459778f38499a80", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a." } ], "missing": [], "long_builds": [ { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "poll_waits": [ 1.5, 2.5, 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 index 0c01f71..21ce225 100644 --- 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 @@ -11,10 +11,10 @@ { "op": "fetch", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -49,7 +49,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -226,12 +226,12 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -239,7 +239,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -255,10 +256,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -293,7 +294,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -470,7 +471,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -486,15 +487,15 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry-after": "2", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 } } @@ -503,7 +504,7 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 429, @@ -528,7 +529,7 @@ "trace_id": "00000000000000000000000000000000", "long_builds": [ { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "poll_waits": [ 1.5 ], 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 index ea02336..edca73f 100644 --- 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 @@ -11,10 +11,10 @@ { "op": "fetch", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -49,7 +49,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -226,12 +226,12 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -239,7 +239,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -255,10 +256,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -293,7 +294,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -470,7 +471,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -486,15 +487,15 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry-after": "2", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 } } @@ -503,7 +504,7 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 429, @@ -515,24 +516,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "6185b86217ef499bb5b6932299df1207" + "x-dfo-trace-id": "55b37040b90c4b51bb1432fb7f565e8d" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { "rows_written": 0, - "estimate_rows": 107252 + "estimate_rows": 107148 } } } @@ -541,24 +542,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "1ebea3ca2d15409c953cd716bdc1fccf" + "x-dfo-trace-id": "76621ada279a42da9405c03760d3fa30" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 61927, - "estimate_rows": 107252 + "rows_written": 50967, + "estimate_rows": 107148 } } } @@ -567,24 +568,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "94bb5a8a7c2041969d9a9118b75dc4aa" + "x-dfo-trace-id": "f489220d020f40cabbd29c2e1d57a188" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -593,24 +594,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c78757a54b9f4b6786a784f8a47ad5b4" + "x-dfo-trace-id": "9855026593bc4f158bc5bcdea3bd1809" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 1784, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 1797, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -619,24 +620,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "914bfd57942740b893ba9ca1b4f4591b" + "x-dfo-trace-id": "119eba2f4a1b446aa13d7abc8d39a2a9" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2289, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2302, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -645,24 +646,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "217766e0425f4916a393331295c4a7e7" + "x-dfo-trace-id": "1019c2a1661647d193bda3dd1a96847a" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2934, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2919, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -671,24 +672,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c501ba8d087b4561b2ff0e423c719ab0" + "x-dfo-trace-id": "2a08d19167d845478a587fcdca1b295b" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "done" }, "manifest": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "shape": { "kind": "statvar_schema", @@ -720,7 +721,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -901,14 +902,14 @@ "requested_window": { "kind": "range", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } } }, - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "prepared_at": "2026-10-26T09:22:44Z", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "prepared_at": "2026-11-01T07:38:40Z", "coverage": { - "rows": 107252, + "rows": 107148, "dimensions": [ { "label": "financingProvider", @@ -930,14 +931,14 @@ }, { "label": "years", - "count": 58 + "count": 57 } ], "window": { "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } }, "citation": { @@ -964,8 +965,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1960-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -976,8 +977,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Standardise providers and recipients", @@ -997,13 +998,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -1056,39 +1067,39 @@ "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 }, "graph_revision": null, "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-24T19:20:27Z", - "content_hash": "3d946d8f4986dbbe0fa3e5c4c917200381f529d89ce417c11daeb22df56eed99", + "exported_at": "2026-11-01T03:08:18Z", + "content_hash": "a1bde3be8710f5ba073e52aaaba73cf9156079c273c874372f54bb07a81b0f94", "graph_endpoint": "graph_release" }, "source_revisions": [ { "source": "provenance/OECDDAC2A", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_76f5fa7244511c58", - "materialiser_build": "d80df9f5fd598b7345255470932d202ee5d49942", + "capability_version": "dset_5282a0674178a233", + "materialiser_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" ], - "observation_count": 107252 + "observation_count": 107148 } ], "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261026T000018Z-0af2cac5", + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", "served_from": "materialise", - "confirmed_at": "2026-10-26T09:22:46.854499+00:00" + "confirmed_at": "2026-11-01T07:38:43.335353+00:00" }, "warnings": [], "diagnostics": [ @@ -1100,34 +1111,34 @@ ], "artifacts": [ { - "artifact_digest": "sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", + "artifact_digest": "sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", "rendering": { "bundle": false, "format": "parquet", "layout": 4 }, - "bytes": 466531, + "bytes": 469908, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231", + "artifact_digest": "sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2", "rendering": { "statistics": "series" }, - "bytes": 144985, + "bytes": 147458, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2" } ], - "series_count": 3656, + "series_count": 3657, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -1151,7 +1162,7 @@ "name": "time_period", "kind": "grain", "droppable": false, - "distinct": 58 + "distinct": 57 }, { "name": "value", @@ -1210,7 +1221,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1222,7 +1234,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1234,7 +1247,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1246,7 +1260,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1258,7 +1273,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1270,7 +1286,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1282,7 +1299,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1294,7 +1312,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1312,7 +1331,8 @@ "label": "South Sudan" } ], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1324,7 +1344,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1336,7 +1357,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1348,7 +1370,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1360,7 +1383,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1372,7 +1396,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -1391,7 +1416,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1415,7 +1440,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1474,10 +1499,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-25T09:22:46.785219Z" + "held_until": "2026-12-01T07:38:43.261993Z" } } } @@ -1486,21 +1511,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61" + "origin_path": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted", - "x-dfo-trace-id": "22f0d88923c14d74825b5f14d41c05b8" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0758c8ebc1d44bb896d7880cc101fd6a" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -1514,7 +1539,7 @@ "expect": [ { "dataset": { - "rows": 107252, + "rows": 107148, "columns": [ "time_period", "financingProvider_label", @@ -1541,24 +1566,24 @@ "members": [ { "parts": [], - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a." + "spec_id": "spec_8d395f753219876fa459778f38499a80", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a." } ], "missing": [], "long_builds": [ { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "poll_waits": [ 1.5, 3.0, 1.5, 1.5, 1.5, - 1.784, - 2.289, - 2.934 + 1.797, + 2.302, + 2.919 ], "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 index a6ede46..9a834cb 100644 --- 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 @@ -11,10 +11,10 @@ { "op": "fetch", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -49,7 +49,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -226,12 +226,12 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -239,7 +239,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -255,10 +256,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -293,7 +294,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -470,7 +471,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -486,14 +487,14 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" } } } @@ -501,22 +502,22 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "6185b86217ef499bb5b6932299df1207" + "x-dfo-trace-id": "55b37040b90c4b51bb1432fb7f565e8d" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "progress": { "rows_written": 0, - "estimate_rows": 107252 + "estimate_rows": 107148 } } } @@ -525,7 +526,7 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 503, @@ -547,22 +548,22 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "1ebea3ca2d15409c953cd716bdc1fccf" + "x-dfo-trace-id": "76621ada279a42da9405c03760d3fa30" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "progress": { - "rows_written": 61927, - "estimate_rows": 107252 + "rows_written": 50967, + "estimate_rows": 107148 } } } @@ -571,22 +572,22 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "94bb5a8a7c2041969d9a9118b75dc4aa" + "x-dfo-trace-id": "f489220d020f40cabbd29c2e1d57a188" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -595,22 +596,22 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c78757a54b9f4b6786a784f8a47ad5b4" + "x-dfo-trace-id": "9855026593bc4f158bc5bcdea3bd1809" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -619,22 +620,22 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "914bfd57942740b893ba9ca1b4f4591b" + "x-dfo-trace-id": "119eba2f4a1b446aa13d7abc8d39a2a9" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -643,22 +644,22 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "217766e0425f4916a393331295c4a7e7" + "x-dfo-trace-id": "1019c2a1661647d193bda3dd1a96847a" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -667,24 +668,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c501ba8d087b4561b2ff0e423c719ab0" + "x-dfo-trace-id": "2a08d19167d845478a587fcdca1b295b" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "done" }, "manifest": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "shape": { "kind": "statvar_schema", @@ -716,7 +717,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -897,14 +898,14 @@ "requested_window": { "kind": "range", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } } }, - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "prepared_at": "2026-10-26T09:22:44Z", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "prepared_at": "2026-11-01T07:38:40Z", "coverage": { - "rows": 107252, + "rows": 107148, "dimensions": [ { "label": "financingProvider", @@ -926,14 +927,14 @@ }, { "label": "years", - "count": 58 + "count": 57 } ], "window": { "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } }, "citation": { @@ -960,8 +961,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1960-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -972,8 +973,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Standardise providers and recipients", @@ -993,13 +994,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -1052,39 +1063,39 @@ "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 }, "graph_revision": null, "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-24T19:20:27Z", - "content_hash": "3d946d8f4986dbbe0fa3e5c4c917200381f529d89ce417c11daeb22df56eed99", + "exported_at": "2026-11-01T03:08:18Z", + "content_hash": "a1bde3be8710f5ba073e52aaaba73cf9156079c273c874372f54bb07a81b0f94", "graph_endpoint": "graph_release" }, "source_revisions": [ { "source": "provenance/OECDDAC2A", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_76f5fa7244511c58", - "materialiser_build": "d80df9f5fd598b7345255470932d202ee5d49942", + "capability_version": "dset_5282a0674178a233", + "materialiser_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" ], - "observation_count": 107252 + "observation_count": 107148 } ], "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261026T000018Z-0af2cac5", + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", "served_from": "materialise", - "confirmed_at": "2026-10-26T09:22:46.854499+00:00" + "confirmed_at": "2026-11-01T07:38:43.335353+00:00" }, "warnings": [], "diagnostics": [ @@ -1096,34 +1107,34 @@ ], "artifacts": [ { - "artifact_digest": "sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", + "artifact_digest": "sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", "rendering": { "bundle": false, "format": "parquet", "layout": 4 }, - "bytes": 466531, + "bytes": 469908, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231", + "artifact_digest": "sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2", "rendering": { "statistics": "series" }, - "bytes": 144985, + "bytes": 147458, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2" } ], - "series_count": 3656, + "series_count": 3657, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -1147,7 +1158,7 @@ "name": "time_period", "kind": "grain", "droppable": false, - "distinct": 58 + "distinct": 57 }, { "name": "value", @@ -1206,7 +1217,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1218,7 +1230,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1230,7 +1243,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1242,7 +1256,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1254,7 +1269,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1266,7 +1282,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1278,7 +1295,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1290,7 +1308,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1308,7 +1327,8 @@ "label": "South Sudan" } ], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1320,7 +1340,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1332,7 +1353,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1344,7 +1366,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1356,7 +1379,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1368,7 +1392,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -1387,7 +1412,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1411,7 +1436,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1470,10 +1495,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-25T09:22:46.785219Z" + "held_until": "2026-12-01T07:38:43.261993Z" } } } @@ -1482,21 +1507,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61" + "origin_path": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted", - "x-dfo-trace-id": "22f0d88923c14d74825b5f14d41c05b8" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0758c8ebc1d44bb896d7880cc101fd6a" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -1510,7 +1535,7 @@ "expect": [ { "dataset": { - "rows": 107252, + "rows": 107148, "columns": [ "time_period", "financingProvider_label", @@ -1537,15 +1562,15 @@ "members": [ { "parts": [], - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a." + "spec_id": "spec_8d395f753219876fa459778f38499a80", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a." } ], "missing": [], "long_builds": [ { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "poll_waits": [ 1.0, 2.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 index 322e6f8..36c1098 100644 --- 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 @@ -11,10 +11,10 @@ { "op": "fetch", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -49,7 +49,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -226,12 +226,12 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -239,7 +239,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -255,10 +256,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -293,7 +294,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -470,7 +471,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -486,15 +487,15 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry-after": "2", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 } } @@ -503,7 +504,7 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 503, @@ -526,24 +527,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "6185b86217ef499bb5b6932299df1207" + "x-dfo-trace-id": "55b37040b90c4b51bb1432fb7f565e8d" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { "rows_written": 0, - "estimate_rows": 107252 + "estimate_rows": 107148 } } } @@ -552,24 +553,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "1ebea3ca2d15409c953cd716bdc1fccf" + "x-dfo-trace-id": "76621ada279a42da9405c03760d3fa30" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 61927, - "estimate_rows": 107252 + "rows_written": 50967, + "estimate_rows": 107148 } } } @@ -578,24 +579,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "94bb5a8a7c2041969d9a9118b75dc4aa" + "x-dfo-trace-id": "f489220d020f40cabbd29c2e1d57a188" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -604,24 +605,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c78757a54b9f4b6786a784f8a47ad5b4" + "x-dfo-trace-id": "9855026593bc4f158bc5bcdea3bd1809" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 1784, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 1797, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -630,24 +631,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "914bfd57942740b893ba9ca1b4f4591b" + "x-dfo-trace-id": "119eba2f4a1b446aa13d7abc8d39a2a9" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2289, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2302, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -656,24 +657,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "217766e0425f4916a393331295c4a7e7" + "x-dfo-trace-id": "1019c2a1661647d193bda3dd1a96847a" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2934, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2919, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -682,24 +683,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c501ba8d087b4561b2ff0e423c719ab0" + "x-dfo-trace-id": "2a08d19167d845478a587fcdca1b295b" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "done" }, "manifest": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "shape": { "kind": "statvar_schema", @@ -731,7 +732,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -912,14 +913,14 @@ "requested_window": { "kind": "range", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } } }, - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "prepared_at": "2026-10-26T09:22:44Z", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "prepared_at": "2026-11-01T07:38:40Z", "coverage": { - "rows": 107252, + "rows": 107148, "dimensions": [ { "label": "financingProvider", @@ -941,14 +942,14 @@ }, { "label": "years", - "count": 58 + "count": 57 } ], "window": { "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } }, "citation": { @@ -975,8 +976,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1960-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -987,8 +988,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Standardise providers and recipients", @@ -1008,13 +1009,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -1067,39 +1078,39 @@ "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 }, "graph_revision": null, "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-24T19:20:27Z", - "content_hash": "3d946d8f4986dbbe0fa3e5c4c917200381f529d89ce417c11daeb22df56eed99", + "exported_at": "2026-11-01T03:08:18Z", + "content_hash": "a1bde3be8710f5ba073e52aaaba73cf9156079c273c874372f54bb07a81b0f94", "graph_endpoint": "graph_release" }, "source_revisions": [ { "source": "provenance/OECDDAC2A", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_76f5fa7244511c58", - "materialiser_build": "d80df9f5fd598b7345255470932d202ee5d49942", + "capability_version": "dset_5282a0674178a233", + "materialiser_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" ], - "observation_count": 107252 + "observation_count": 107148 } ], "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261026T000018Z-0af2cac5", + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", "served_from": "materialise", - "confirmed_at": "2026-10-26T09:22:46.854499+00:00" + "confirmed_at": "2026-11-01T07:38:43.335353+00:00" }, "warnings": [], "diagnostics": [ @@ -1111,34 +1122,34 @@ ], "artifacts": [ { - "artifact_digest": "sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", + "artifact_digest": "sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", "rendering": { "bundle": false, "format": "parquet", "layout": 4 }, - "bytes": 466531, + "bytes": 469908, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231", + "artifact_digest": "sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2", "rendering": { "statistics": "series" }, - "bytes": 144985, + "bytes": 147458, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2" } ], - "series_count": 3656, + "series_count": 3657, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -1162,7 +1173,7 @@ "name": "time_period", "kind": "grain", "droppable": false, - "distinct": 58 + "distinct": 57 }, { "name": "value", @@ -1221,7 +1232,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1233,7 +1245,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1245,7 +1258,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1257,7 +1271,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1269,7 +1284,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1281,7 +1297,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1293,7 +1310,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1305,7 +1323,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1323,7 +1342,8 @@ "label": "South Sudan" } ], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1335,7 +1355,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1347,7 +1368,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1359,7 +1381,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1371,7 +1394,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1383,7 +1407,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -1402,7 +1427,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1426,7 +1451,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1485,10 +1510,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-25T09:22:46.785219Z" + "held_until": "2026-12-01T07:38:43.261993Z" } } } @@ -1497,21 +1522,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61" + "origin_path": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted", - "x-dfo-trace-id": "22f0d88923c14d74825b5f14d41c05b8" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0758c8ebc1d44bb896d7880cc101fd6a" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -1525,7 +1550,7 @@ "expect": [ { "dataset": { - "rows": 107252, + "rows": 107148, "columns": [ "time_period", "financingProvider_label", @@ -1552,24 +1577,24 @@ "members": [ { "parts": [], - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a." + "spec_id": "spec_8d395f753219876fa459778f38499a80", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a." } ], "missing": [], "long_builds": [ { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "poll_waits": [ 1.5, 5.0, 1.5, 1.5, 1.5, - 1.784, - 2.289, - 2.934 + 1.797, + 2.302, + 2.919 ], "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 index a629db0..fe63360 100644 --- 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 @@ -11,10 +11,10 @@ { "op": "fetch", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -49,7 +49,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -226,12 +226,12 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -239,7 +239,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -255,10 +256,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -293,7 +294,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -470,7 +471,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -486,15 +487,15 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry-after": "2", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 } } @@ -503,7 +504,7 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 503, @@ -525,24 +526,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "6185b86217ef499bb5b6932299df1207" + "x-dfo-trace-id": "55b37040b90c4b51bb1432fb7f565e8d" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { "rows_written": 0, - "estimate_rows": 107252 + "estimate_rows": 107148 } } } @@ -551,24 +552,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "1ebea3ca2d15409c953cd716bdc1fccf" + "x-dfo-trace-id": "76621ada279a42da9405c03760d3fa30" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 61927, - "estimate_rows": 107252 + "rows_written": 50967, + "estimate_rows": 107148 } } } @@ -577,7 +578,7 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 503, @@ -599,7 +600,7 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 503, @@ -621,24 +622,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "94bb5a8a7c2041969d9a9118b75dc4aa" + "x-dfo-trace-id": "f489220d020f40cabbd29c2e1d57a188" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -647,24 +648,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c78757a54b9f4b6786a784f8a47ad5b4" + "x-dfo-trace-id": "9855026593bc4f158bc5bcdea3bd1809" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 1784, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 1797, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -673,24 +674,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "914bfd57942740b893ba9ca1b4f4591b" + "x-dfo-trace-id": "119eba2f4a1b446aa13d7abc8d39a2a9" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2289, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2302, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -699,24 +700,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "217766e0425f4916a393331295c4a7e7" + "x-dfo-trace-id": "1019c2a1661647d193bda3dd1a96847a" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2934, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2919, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -725,24 +726,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c501ba8d087b4561b2ff0e423c719ab0" + "x-dfo-trace-id": "2a08d19167d845478a587fcdca1b295b" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "done" }, "manifest": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "shape": { "kind": "statvar_schema", @@ -774,7 +775,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -955,14 +956,14 @@ "requested_window": { "kind": "range", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } } }, - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "prepared_at": "2026-10-26T09:22:44Z", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "prepared_at": "2026-11-01T07:38:40Z", "coverage": { - "rows": 107252, + "rows": 107148, "dimensions": [ { "label": "financingProvider", @@ -984,14 +985,14 @@ }, { "label": "years", - "count": 58 + "count": 57 } ], "window": { "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } }, "citation": { @@ -1018,8 +1019,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1960-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -1030,8 +1031,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Standardise providers and recipients", @@ -1051,13 +1052,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -1110,39 +1121,39 @@ "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 }, "graph_revision": null, "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-24T19:20:27Z", - "content_hash": "3d946d8f4986dbbe0fa3e5c4c917200381f529d89ce417c11daeb22df56eed99", + "exported_at": "2026-11-01T03:08:18Z", + "content_hash": "a1bde3be8710f5ba073e52aaaba73cf9156079c273c874372f54bb07a81b0f94", "graph_endpoint": "graph_release" }, "source_revisions": [ { "source": "provenance/OECDDAC2A", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_76f5fa7244511c58", - "materialiser_build": "d80df9f5fd598b7345255470932d202ee5d49942", + "capability_version": "dset_5282a0674178a233", + "materialiser_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" ], - "observation_count": 107252 + "observation_count": 107148 } ], "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261026T000018Z-0af2cac5", + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", "served_from": "materialise", - "confirmed_at": "2026-10-26T09:22:46.854499+00:00" + "confirmed_at": "2026-11-01T07:38:43.335353+00:00" }, "warnings": [], "diagnostics": [ @@ -1154,34 +1165,34 @@ ], "artifacts": [ { - "artifact_digest": "sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", + "artifact_digest": "sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", "rendering": { "bundle": false, "format": "parquet", "layout": 4 }, - "bytes": 466531, + "bytes": 469908, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231", + "artifact_digest": "sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2", "rendering": { "statistics": "series" }, - "bytes": 144985, + "bytes": 147458, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2" } ], - "series_count": 3656, + "series_count": 3657, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -1205,7 +1216,7 @@ "name": "time_period", "kind": "grain", "droppable": false, - "distinct": 58 + "distinct": 57 }, { "name": "value", @@ -1264,7 +1275,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1276,7 +1288,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1288,7 +1301,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1300,7 +1314,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1312,7 +1327,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1324,7 +1340,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1336,7 +1353,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1348,7 +1366,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1366,7 +1385,8 @@ "label": "South Sudan" } ], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1378,7 +1398,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1390,7 +1411,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1402,7 +1424,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1414,7 +1437,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1426,7 +1450,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -1445,7 +1470,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1469,7 +1494,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1528,10 +1553,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-25T09:22:46.785219Z" + "held_until": "2026-12-01T07:38:43.261993Z" } } } @@ -1540,21 +1565,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61" + "origin_path": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted", - "x-dfo-trace-id": "22f0d88923c14d74825b5f14d41c05b8" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0758c8ebc1d44bb896d7880cc101fd6a" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -1568,7 +1593,7 @@ "expect": [ { "dataset": { - "rows": 107252, + "rows": 107148, "columns": [ "time_period", "financingProvider_label", @@ -1595,15 +1620,15 @@ "members": [ { "parts": [], - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a." + "spec_id": "spec_8d395f753219876fa459778f38499a80", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a." } ], "missing": [], "long_builds": [ { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "poll_waits": [ 1.5, 1.5, @@ -1612,9 +1637,9 @@ 1.5, 1.5, 1.5, - 1.784, - 2.289, - 2.934 + 1.797, + 2.302, + 2.919 ], "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 index 9a95b17..5fcd6f3 100644 --- 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 @@ -176,7 +176,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "b89cda3bb794448abf06b56c955d754e" + "x-dfo-trace-id": "27d2f0b694144799a0314850fb5d29bc" }, "json": { "schema_version": 1, @@ -583,7 +583,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -613,7 +613,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -629,7 +629,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -712,7 +712,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -724,7 +725,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -736,7 +738,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -748,7 +751,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -760,7 +764,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -772,7 +777,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -784,7 +790,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -796,7 +803,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -808,7 +816,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -820,7 +829,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -832,7 +842,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -844,7 +855,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -856,7 +868,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -868,7 +881,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -897,7 +911,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -915,7 +929,7 @@ "headers": { "content-type": "text/html", "location": "bytes", - "x-dfo-trace-id": "cf3f86713afb44c98d21fbf9731d66e3" + "x-dfo-trace-id": "b00bcf5bd0ca432eac38be0de17b99ad" } } }, 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 index c5dc5c9..6f3a646 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:31Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:38:27Z" }, "call": [ { @@ -183,7 +183,7 @@ "status": 400, "headers": { "content-type": "application/problem+json", - "x-dfo-trace-id": "827e62e72957420a91edcc1564671a13" + "x-dfo-trace-id": "7e23b240874e475ea2fb04958d05a03c" }, "json": { "type": "/codes/request_invalid", @@ -213,8 +213,8 @@ "truncated": false } ], - "trace_id": "827e62e72957420a91edcc1564671a13", - "capability_version": "dset_76f5fa7244511c58", + "trace_id": "7e23b240874e475ea2fb04958d05a03c", + "capability_version": "dset_5282a0674178a233", "retryable": false } } @@ -225,7 +225,7 @@ "error": { "class": "InvalidRequestError", "code": "request_invalid", - "trace_id": "827e62e72957420a91edcc1564671a13" + "trace_id": "7e23b240874e475ea2fb04958d05a03c" } } ] 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 index 8393370..c6e7ca9 100644 --- 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 @@ -183,7 +183,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "250fbb95951e4a8c8d847cbcde0ae4f9" + "x-dfo-trace-id": "a746de54b70e40c696df4f9f2e711908" }, "json": { "schema_version": 1, @@ -589,8 +589,8 @@ "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", - "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -620,7 +620,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -636,7 +636,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -719,7 +719,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -731,7 +732,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -743,7 +745,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -755,7 +758,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -767,7 +771,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -779,7 +784,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -791,7 +797,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -803,7 +810,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -815,7 +823,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -827,7 +836,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -839,7 +849,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -851,7 +862,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -863,7 +875,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -875,7 +888,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -904,7 +918,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -998,7 +1012,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "ff646392059e46e68f83a2753e921d6a" + "x-dfo-trace-id": "203e162341304fd082ccc7499fd37070" }, "json": { "schema_version": 1, @@ -1007,11 +1021,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "ff646392059e46e68f83a2753e921d6a", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "203e162341304fd082ccc7499fd37070", "warnings": [], "timing_ms": { - "total": 1, + "total": 173, "by_step": { "coverage": 0 } @@ -1024,9 +1038,39 @@ "variable_text": "dataset", "warnings": [], "timing_ms": { - "total": 0, + "total": 140, "by_step": { - "response_cache_part_memo": 0 + "validate": 4, + "phase_validate": 0, + "walk": 13, + "reread_arcs": 0, + "phase_reread_arcs": 0, + "detect_edits": 1, + "phase_detect_edits": 0, + "resolve_survivors": 0, + "phase_resolve_survivors": 0, + "shape": 4, + "phase_build_shape": 0, + "bind": 0, + "phase_build_bindings": 0, + "where_places": 1, + "phase_where_places": 0, + "materialise": 16, + "phase_materialise": 0, + "ground_related": 0, + "ground_units": 0, + "ground_facets": 0, + "ground_convert": 0, + "answer": 47, + "ground_gates": 4, + "phase_ground_build": 46, + "finalize_preview": 0, + "options": 2, + "finalize_related": 0, + "finalize_wholes": 0, + "finalize_relaunch": 1, + "phase_finalize": 0, + "served_entry": 1 } }, "entity_refs": [], @@ -1460,7 +1504,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -1518,7 +1562,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1331, + "member_count": 1337, "served_rows": 4, "served_rows_exact": true } @@ -1587,7 +1631,7 @@ }, "relation": "child", "parent": "CRSTypeOfFinance100", - "member_count": 12672, + "member_count": 12745, "served_rows": 4, "served_rows_exact": true } @@ -1614,7 +1658,7 @@ "value_kind": "enum_value" }, "relation": "root", - "member_count": 14098, + "member_count": 14146, "served_rows": 4, "served_rows_exact": true } @@ -2025,7 +2069,7 @@ "start_year": 2020, "end_year": 2023 }, - "capability_version": "cap_765c9d2a0c7529b9" + "capability_version": "cap_4913302d7a6b6435" }, "confidence": "high", "available_at_place": true, @@ -2286,6 +2330,8 @@ } } ], + "concept_label": "basic health care", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsCooperationModality", @@ -4520,7 +4566,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "ff646392059e46e68f83a2753e921d6a" + "trace_id": "203e162341304fd082ccc7499fd37070" } } ] 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 index a796ffd..3a7fd61 100644 --- 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 @@ -176,7 +176,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "b89cda3bb794448abf06b56c955d754e" + "x-dfo-trace-id": "27d2f0b694144799a0314850fb5d29bc" }, "json": { "schema_version": 1, @@ -583,7 +583,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -613,7 +613,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -629,7 +629,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -712,7 +712,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -724,7 +725,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -736,7 +738,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -748,7 +751,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -760,7 +764,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -772,7 +777,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -784,7 +790,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -796,7 +803,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -808,7 +816,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -820,7 +829,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -832,7 +842,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -844,7 +855,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -856,7 +868,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -868,7 +881,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -897,7 +911,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -915,7 +929,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "cf3f86713afb44c98d21fbf9731d66e3" + "x-dfo-trace-id": "b00bcf5bd0ca432eac38be0de17b99ad" } } }, 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 index dcf6a62..e71aab2 100644 --- 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 @@ -176,7 +176,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "b89cda3bb794448abf06b56c955d754e" + "x-dfo-trace-id": "27d2f0b694144799a0314850fb5d29bc" }, "json": { "schema_version": 1, @@ -583,7 +583,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -613,7 +613,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -629,7 +629,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -712,7 +712,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -724,7 +725,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -736,7 +738,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -748,7 +751,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -760,7 +764,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -772,7 +777,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -784,7 +790,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -796,7 +803,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -808,7 +816,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -820,7 +829,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -832,7 +842,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -844,7 +855,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -856,7 +868,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -868,7 +881,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -897,7 +911,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -915,7 +929,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "cf3f86713afb44c98d21fbf9731d66e3" + "x-dfo-trace-id": "b00bcf5bd0ca432eac38be0de17b99ad" } } }, @@ -942,7 +956,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ac44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170?X-Goog-Signature=redacted", - "x-dfo-trace-id": "cf3f86713afb44c98d21fbf9731d66e3" + "x-dfo-trace-id": "b00bcf5bd0ca432eac38be0de17b99ad" } } }, 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 index 575a504..146e50d 100644 --- 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 @@ -176,7 +176,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "b89cda3bb794448abf06b56c955d754e" + "x-dfo-trace-id": "27d2f0b694144799a0314850fb5d29bc" }, "json": { "schema_version": 1, @@ -583,7 +583,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -613,7 +613,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "https://storage.googleapis.com/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -629,7 +629,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -712,7 +712,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -724,7 +725,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -736,7 +738,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -748,7 +751,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -760,7 +764,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -772,7 +777,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -784,7 +790,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -796,7 +803,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -808,7 +816,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -820,7 +829,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -832,7 +842,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -844,7 +855,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -856,7 +868,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -868,7 +881,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -897,7 +911,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" @@ -911,7 +925,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "b89cda3bb794448abf06b56c955d754e" + "trace_id": "27d2f0b694144799a0314850fb5d29bc" } } ] 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 index 03d5a61..3864a56 100644 --- 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 @@ -584,7 +584,7 @@ "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", "served_from": "head", - "confirmed_at": "2026-10-26T09:18:06.976633+00:00" + "confirmed_at": "2026-11-01T07:37:46.482431+00:00" }, "warnings": [ { @@ -614,7 +614,7 @@ "created_at": "2026-10-23T16:58:47.734759+00:00", "tier": "working", "url": "/api/datasets/spec_cb5baa4161de718f18583060674dbca6/cv_bf242138f8d0a892c97da9373d1626f4/files/sha256:c44200969f19d73104d1bc24ebca905e59f749c2939234cdde10ba6f5a131170", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:d3a506bc9b95188583b5764592d2f1897c0665add660106b7f77c3e501000bb4", @@ -630,7 +630,7 @@ ], "series_count": 1, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -713,7 +713,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -725,7 +726,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -737,7 +739,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -749,7 +752,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -761,7 +765,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -773,7 +778,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -785,7 +791,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -797,7 +804,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -809,7 +817,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -821,7 +830,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -833,7 +843,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -845,7 +856,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -857,7 +869,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -869,7 +882,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -898,7 +912,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, "held_until": "2026-11-19T13:59:18.051742Z" 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 index 5652a17..84bc8ac 100644 --- 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 @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c7cb40f3790f4a15a0ddcad0cc93c9bb" + "x-dfo-trace-id": "92a325e77a854c5daafa875164b5e23e" }, "json": { "schema_version": 1, @@ -42,23 +42,27 @@ "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": true + "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "c7cb40f3790f4a15a0ddcad0cc93c9bb", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "92a325e77a854c5daafa875164b5e23e", "warnings": [], "timing_ms": { - "total": 3, + "total": 17540, "by_step": { "coverage": 0, - "response_cache_layer1": 1 + "extract": 1239, + "exclusion_read": 719, + "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 0, - "output_tokens": 0, - "cached_tokens": 0 + "input_tokens": 2784, + "output_tokens": 111, + "cached_tokens": 0, + "jev_input_tokens": 6695, + "jev_output_tokens": 2088 }, "timed_out": false }, @@ -74,30 +78,30 @@ } ], "timing_ms": { - "total": 3011, + "total": 16265, "by_step": { - "recall": 457, + "recall": 2821, "phase_resolve_places": 0, "phase_check_entities": 0, "shape_arcs": 2, - "shape_probe_coverage": 8, - "shape_probe": 114, - "shape_groups": 579, + "shape_probe_coverage": 104, + "shape_probe": 352, + "shape_groups": 109, "shape_labels": 1, - "shape_admission": 2, + "shape_admission": 0, "phase_derive_shapes": 0, - "shape": 1247, + "shape": 1134, "phase_prune_and_rank": 0, - "bind": 266, - "phase_bind": 327, - "phase_settle": 46, - "phase_place_bindings": 57, + "bind": 5473, + "phase_bind": 345, + "phase_settle": 105, + "phase_place_bindings": 1078, "phase_facet_requests": 0, - "materialise": 44, - "phase_materialise": 200, - "answer": 220, - "options": 55, - "phase_outcome": 92 + "materialise": 2132, + "phase_materialise": 313, + "answer": 1829, + "options": 872, + "phase_outcome": 163 } }, "restatement": { @@ -544,7 +548,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -602,7 +606,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1606, + "member_count": 1614, "served_rows": 1, "served_rows_exact": true }, @@ -616,7 +620,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityB", - "member_count": 1331, + "member_count": 1337, "served_rows": 6, "served_rows_exact": true }, @@ -643,7 +647,7 @@ }, "relation": "child", "parent": "CRSCooperationModalityC", - "member_count": 7005, + "member_count": 7041, "served_rows": 7, "served_rows_exact": true }, @@ -739,7 +743,7 @@ }, "relation": "child", "parent": "CRSTypeOfFinance100", - "member_count": 12672, + "member_count": 12745, "served_rows": 30, "served_rows_exact": true } @@ -766,7 +770,7 @@ "value_kind": "enum_value" }, "relation": "root", - "member_count": 14098, + "member_count": 14146, "served_rows": 30, "served_rows_exact": true } @@ -1197,7 +1201,7 @@ "selected": [] } ], - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -1205,214 +1209,7 @@ }, "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 - } - ], + "alternative_measures": [], "measure_label": "gross disbursements", "measure_label_axes": [ "populationType", @@ -1458,6 +1255,8 @@ } } ], + "concept_label": "basic health care", + "published_tables": "OECD Creditor Reporting System (CRS)", "open_axis_facts": [ { "property": "crsTypeOfFinance", @@ -3483,6 +3282,363 @@ "destination": "NGN", "origin": "EUR" } + }, + "scope_choices": { + "id": "spec_774d6c001a6250aa67ca676ab067895e", + "base": { + "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" + } + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [ + { + "axis": "sector", + "option_id": "sector:12220", + "provenance": "explicit", + "origin": { + "kind": "text", + "text": "basic health care", + "start": 46, + "end": 63 + } + } + ], + "dropped_entries": [], + "choices": [ + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:sector", + "axis": "sector", + "rule": "sector_code", + "provenance": "explicit", + "active": "sector:12220", + "options": [ + { + "option_id": "sector:12220", + "label": "basic health care (CRS 12220)", + "binding": { + "kind": "slot", + "slot": "crsPurpose", + "state": "value", + "refs": [ + "CRSPurposeCode12220" + ] + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:gross", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "available", + "detail": {} + } + } + ] + }, + { + "id": "spec_774d6c001a6250aa67ca676ab067895e:provider", + "axis": "provider", + "rule": "bilateral_flows", + "provenance": "default", + "active": "provider:bilateral", + "options": [ + { + "option_id": "provider:bilateral", + "label": "bilateral flows only", + "binding": { + "kind": "provider", + "scope": "bilateral" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "provider:inclusive", + "label": "bilateral plus imputed multilateral, 2020 to 2024", + "binding": { + "kind": "provider", + "scope": "inclusive", + "window": [ + 2020, + 2024 + ], + "provenance": "provenance/ONEBilateralAndImputedMultilateral" + }, + "availability": { + "status": "partial", + "years": [ + [ + 2011, + 2016 + ], + [ + 2020, + 2024 + ] + ], + "code": "imputed_coverage", + "detail": {} + } + } + ] + } + ], + "compiled": { + "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" + } + }, + "components": [ + { + "role": "whole", + "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" + } + } + } + ] + }, + "ledger": [] } } } @@ -3796,7 +3952,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "4c3f35c8c0d44b99941a73a9519b41d2" + "x-dfo-trace-id": "fff69a3d23f5431c8a34da1b72c9e034" }, "json": { "schema_version": 1, @@ -4196,8 +4352,8 @@ "family_member_digest": "9fd3643bbde505d9542fd3d090ddd549349765d12b6bad95b17271cbf297ea8c", "frame_grammar_version": "1.1.0", "origin_catalogue_build_id": "20261011T194155Z-80081f08", - "served_from": "head", - "confirmed_at": "2026-10-26T09:17:22.037029+00:00" + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:35:51.549820+00:00" }, "warnings": [ { @@ -4227,7 +4383,7 @@ "created_at": "2026-10-23T16:56:32.058938+00:00", "tier": "working", "url": "/api/datasets/spec_774d6c001a6250aa67ca676ab067895e/cv_b92d94774702c7f05f2075d0b03dd756/files/sha256:421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { "artifact_digest": "sha256:07984a96eaf8ee637fe15bf13f2b0d9160a6378d3fa1efae2e71cf0e20115dff", @@ -4243,7 +4399,7 @@ ], "series_count": 5, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -4326,7 +4482,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -4338,7 +4495,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -4350,7 +4508,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -4362,7 +4521,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -4374,7 +4534,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -4386,7 +4547,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -4398,7 +4560,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4410,7 +4573,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4422,7 +4586,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4434,7 +4599,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4446,7 +4612,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4458,7 +4625,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4470,7 +4638,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4482,7 +4651,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -4526,7 +4696,7 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": true } @@ -4543,7 +4713,7 @@ "headers": { "content-type": "text/html", "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A421efacc2dc010af38112a087b0b49ff5539f61d2afd12a88272b27e99b5f5db?X-Goog-Signature=redacted", - "x-dfo-trace-id": "333ab72de55449ed8288a5f458406a4c" + "x-dfo-trace-id": "815c18c3e59945d6ade9f99db58f2960" } } }, 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 index 4a1c656..d65faf3 100644 --- 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 @@ -5,17 +5,17 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:22:34Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:38:30Z" }, "call": [ { "op": "mint", "spec": { - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -50,7 +50,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -227,12 +227,12 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } }, - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a.", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a.", "entity_groups": { "destination": { "label": "G77 countries", @@ -240,7 +240,8 @@ }, "origin": { "label": "DAC countries", - "group_id": "groups/OECD.DAC" + "group_id": "groups/OECD.DAC", + "sum_differs": true } } }, @@ -259,10 +260,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "identity_version": "spec1", "shape": { @@ -297,7 +298,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -474,7 +475,7 @@ }, "requested_window": { "kind": "range", - "start_year": 1967, + "start_year": 1968, "end_year": 2024 } } @@ -490,15 +491,15 @@ "status": 202, "headers": { "content-type": "application/json", - "location": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "location": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry-after": "2", - "x-dfo-trace-id": "9e96509866ff4da09a698df1f19a5cbd" + "x-dfo-trace-id": "7fd3deb153d34f4b9afce2b95ffdd664" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500 } } @@ -507,24 +508,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "6185b86217ef499bb5b6932299df1207" + "x-dfo-trace-id": "55b37040b90c4b51bb1432fb7f565e8d" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { "rows_written": 0, - "estimate_rows": 107252 + "estimate_rows": 107148 } } } @@ -533,24 +534,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "1ebea3ca2d15409c953cd716bdc1fccf" + "x-dfo-trace-id": "76621ada279a42da9405c03760d3fa30" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 61927, - "estimate_rows": 107252 + "rows_written": 50967, + "estimate_rows": 107148 } } } @@ -559,24 +560,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "94bb5a8a7c2041969d9a9118b75dc4aa" + "x-dfo-trace-id": "f489220d020f40cabbd29c2e1d57a188" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "retry_after_ms": 1500, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -585,24 +586,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "2", - "x-dfo-trace-id": "c78757a54b9f4b6786a784f8a47ad5b4" + "x-dfo-trace-id": "9855026593bc4f158bc5bcdea3bd1809" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 1784, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 1797, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -611,24 +612,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "914bfd57942740b893ba9ca1b4f4591b" + "x-dfo-trace-id": "119eba2f4a1b446aa13d7abc8d39a2a9" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2289, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2302, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -637,24 +638,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", "retry-after": "3", - "x-dfo-trace-id": "217766e0425f4916a393331295c4a7e7" + "x-dfo-trace-id": "1019c2a1661647d193bda3dd1a96847a" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "running", - "poll": "/api/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", - "retry_after_ms": 2934, + "poll": "/api/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", + "retry_after_ms": 2919, "progress": { - "rows_written": 107252, - "estimate_rows": 107252 + "rows_written": 107148, + "estimate_rows": 107148 } } } @@ -663,24 +664,24 @@ { "request": { "method": "GET", - "path": "/datasets/operations/op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f" + "path": "/datasets/operations/op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf" }, "response": { "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "c501ba8d087b4561b2ff0e423c719ab0" + "x-dfo-trace-id": "2a08d19167d845478a587fcdca1b295b" }, "json": { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "done" }, "manifest": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", + "spec_id": "spec_8d395f753219876fa459778f38499a80", "identity": { "shape": { "kind": "statvar_schema", @@ -712,7 +713,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -893,14 +894,14 @@ "requested_window": { "kind": "range", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } } }, - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "prepared_at": "2026-10-26T09:22:44Z", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "prepared_at": "2026-11-01T07:38:40Z", "coverage": { - "rows": 107252, + "rows": 107148, "dimensions": [ { "label": "financingProvider", @@ -922,14 +923,14 @@ }, { "label": "years", - "count": 58 + "count": 57 } ], "window": { "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 } }, "citation": { @@ -956,8 +957,8 @@ "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", + "last_update": "2026-10-29", + "years_covered": "1960-2025", "granularity": "Annual, by provider and recipient", "currencies": [ "USD" @@ -968,8 +969,8 @@ "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": "Mark the partial year", + "description": "The OECD publishes data for a year as donors report it, and its final release in December of the following year covers every donor. Until then, the year is partial. The pipeline publishes it, and the import's provenance names it in `partialObservationDate`." }, { "transformation": "Standardise providers and recipients", @@ -989,13 +990,23 @@ } ], "version_history": [ + { + "date": "2026-10-29", + "title": "Partial year published, marked as partial", + "changes": [ + { + "kind": "changed", + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is included, and the import's provenance marks it with `partialObservationDate`." + } + ] + }, { "date": "2026-10-15", - "title": "Partial preliminary year excluded", + "title": "Partial year excluded", "changes": [ { "kind": "changed", - "note": "The partial preliminary year published ahead of the next full release is excluded." + "note": "The partial year, which only some donors have reported ahead of the OECD's final release in December, is excluded." } ] }, @@ -1048,39 +1059,39 @@ "kind": "range", "origin": "query", "end_year": 2024, - "start_year": 1967 + "start_year": 1968 }, "graph_revision": null, "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-24T19:20:27Z", - "content_hash": "3d946d8f4986dbbe0fa3e5c4c917200381f529d89ce417c11daeb22df56eed99", + "exported_at": "2026-11-01T03:08:18Z", + "content_hash": "a1bde3be8710f5ba073e52aaaba73cf9156079c273c874372f54bb07a81b0f94", "graph_endpoint": "graph_release" }, "source_revisions": [ { "source": "provenance/OECDDAC2A", - "revision": "2026-10-15" + "revision": "2026-10-29" } ], - "capability_version": "dset_76f5fa7244511c58", - "materialiser_build": "d80df9f5fd598b7345255470932d202ee5d49942", + "capability_version": "dset_5282a0674178a233", + "materialiser_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" ], - "observation_count": 107252 + "observation_count": 107148 } ], "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "frame_grammar_version": "1.1.0", - "origin_catalogue_build_id": "20261026T000018Z-0af2cac5", + "origin_catalogue_build_id": "20261029T171521Z-7d0a5854", "served_from": "materialise", - "confirmed_at": "2026-10-26T09:22:46.854499+00:00" + "confirmed_at": "2026-11-01T07:38:43.335353+00:00" }, "warnings": [], "diagnostics": [ @@ -1092,34 +1103,34 @@ ], "artifacts": [ { - "artifact_digest": "sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", + "artifact_digest": "sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", "rendering": { "bundle": false, "format": "parquet", "layout": 4 }, - "bytes": 466531, + "bytes": 469908, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231", + "artifact_digest": "sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2", "rendering": { "statistics": "series" }, - "bytes": 144985, + "bytes": 147458, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-26T09:22:46.786678+00:00", + "created_at": "2026-11-01T07:38:43.262295+00:00", "tier": "working", - "url": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:5247bafa55f84fe2f8bc348601acb955162c39a1a082e939945336470e5c5231" + "url": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:73e13b2b41415cb991b4416af6ddd4c6ccf9e2ebc9bbaa4818b197a9e6e9b1a2" } ], - "series_count": 3656, + "series_count": 3657, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -1143,7 +1154,7 @@ "name": "time_period", "kind": "grain", "droppable": false, - "distinct": 58 + "distinct": 57 }, { "name": "value", @@ -1202,7 +1213,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1214,7 +1226,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1226,7 +1239,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1238,7 +1252,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -1250,7 +1265,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1262,7 +1278,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -1274,7 +1291,8 @@ "covered": 32 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1286,7 +1304,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1304,7 +1323,8 @@ "label": "South Sudan" } ], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1316,7 +1336,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1328,7 +1349,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -1340,7 +1362,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1352,7 +1375,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -1364,7 +1388,8 @@ "covered": 133 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -1383,7 +1408,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1407,7 +1432,7 @@ "varying": [ { "column": "time_period", - "distinct": 58 + "distinct": 57 } ] }, @@ -1466,10 +1491,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-25T09:22:46.785219Z" + "held_until": "2026-12-01T07:38:43.261993Z" } } } @@ -1478,21 +1503,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_70ddf0ce6a9b3f147063f2adf37fab9e/cv_fafc60a507e03b0d42689fb1936127b9/files/sha256:a8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61" + "origin_path": "/api/datasets/spec_8d395f753219876fa459778f38499a80/cv_e9cd9cba677e6dd0e2a81d5700d5edfb/files/sha256:1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted", - "x-dfo-trace-id": "22f0d88923c14d74825b5f14d41c05b8" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted", + "x-dfo-trace-id": "0758c8ebc1d44bb896d7880cc101fd6a" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Aa8c742f8f416b2f3414c7a569f7c18b337c5ee9ae3012483583bad0b238f5c61?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A1effd75b0d46b45109033faa8adfba1dbdc83d285810fe8c878c953595456b57?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -1506,13 +1531,13 @@ "expect": [ { "operation": { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "status": "pending" } }, { "dataset": { - "rows": 107252, + "rows": 107148, "columns": [ "time_period", "financingProvider_label", @@ -1539,23 +1564,23 @@ "members": [ { "parts": [], - "spec_id": "spec_70ddf0ce6a9b3f147063f2adf37fab9e", - "content_version": "cv_fafc60a507e03b0d42689fb1936127b9", - "sentence": "Gross disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1967 to 2024. Current US dollars · OECD DAC2a." + "spec_id": "spec_8d395f753219876fa459778f38499a80", + "content_version": "cv_e9cd9cba677e6dd0e2a81d5700d5edfb", + "sentence": "Net disbursements to the 133 G77 countries from the 32 DAC countries for official development assistance, 1968 to 2024. Current US dollars · OECD DAC2a." } ], "missing": [], "long_builds": [ { - "operation_id": "op_510787ac0c09a1323e90ae20eafc3eb0246bcd04333aa2ca10792d48dae2cc6f", + "operation_id": "op_d53662fbaac38ee0bd0801eab9630ebca0c8b467d33b0a1b2c6792d0cd83b7cf", "poll_waits": [ 1.5, 1.5, 1.5, 1.5, - 1.784, - 2.289, - 2.934 + 1.797, + 2.302, + 2.919 ], "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 index a4320367b0f13b033c724b7fd79e010863969470..1e069c56f0df9bf57b9193ec1df7554368e0f580 100644 GIT binary patch literal 469908 zcmeFa4R}*kx;DIa_TKGI^V8ilNz*hf5+al`>s98p0XM{)dD98^YU#v|u@c2H-|yfbs= zocH^_>-*k|b+OWzWUuV~tYG3uOF~F)!z5cVmxLohB7_{5>ud<2U|%#? zRWmR+8XsBgh{pZ#zNkOuhz%}V><*1Awnv8pqs(w@ZX#qM_CB z6g*!027?z7jUM*prupn)uJ#T+`=_Ie{hm%k6QbNMJA4mvo0<^e_8M+Mgl9f`cC7{> zMznPr<|ZHaBdTpd9jwc8iSe)E2=BYgs&&@MzW)!n#^lPDb$_?A@t@VAA2(pPHgi5% zgnz&x{_$XN!G9hMM*ge8h-Y2IFXiOp!Ia~3Q;*J~U@)u1{`bzTq1E;0!C>U%V5(K$ zof+YzP7vJts?+|kkawYn|7e!rv_$x*C>;i^mRSGZpkTy54+`Iq98@{--Js;!-1Ns& z=+E65JNiV&=VorC#K-a^Fr-`3`uBze6aRTg7(Y2=;a%Skd7PB|h9kYzo%M@4*<1ST zqj~bXBss68D(+6nJzk;&_;`zy+(v%qb(c9tE_hwd=Rk462d83Hcv@*-O(wj??_ zkOFVj`s4nfpLNZ)WzmrpAtvUJ2Zih#D?)t{Rck0Q8i+;vQsI^Q5HsM9kF!thq4}mZ`jO z{5Y0Pcm}bwQVNdt3^F65OZ+j6uV{-6j`^2H{TX~?2*zfu)3z)W48{MpoBoBpWZds9 z{8vu;&w2b`4ki50hX1Sa{wb#y{wI46$Wp(Zn&epjQ=f19^9;yR8~Q@5pCkwTANhOA zHOtCUk`v}n4)ovga+yT&U5dm{&f{P>9A%Rtn5+La&!N71SN8q0vkM;rUp#ljdd-vy6wJOELv4Ms8Da%~{A08j~F&!Go!s&xW5v5)La4V{KEgqm3t ztDSGSn0%azp<2^Z@aFtxz%1l};Q*i(Vnl5R`w4raK?#q|h8H0^v0r8P!V6SgZHIn2 z{Hb3E=U`%=wL4j?bHH=L(Z+s5eT`v1JUUrqt#2?iVnltj3BKN41!vs?M-%nQ@2PKx zV^9Zsh|>+{M>yLJr5Mp*2f#!P>=6y7Dh><20HBRE>~M|q4OcPLWcr3fG&$Krnv$P$ z8*(wKX+gXGGMK2wuni|%Hp5YPZi6dhAO8a$YgyoSHC?kMJZ-LF-)y!Uj&Rt=J2|M? zl!H^vt_J;4u$76A6U{7wqxpuj@U+zcgEw~={vDn#U~RP!%mEO8Ge)@U*lTdt!zU0uOLVdn0S-_9k|`c9%iGA=>8~w!C`P2@8L)#B>+;D1D~Ic<;65kNEWga~~7z4^@S|OB4}BRNkLh>WoRx@i#C#-9k$=-Dl6u>k$_H%HysT+0GL@()1 zNu>5txY}{KmYc@o$$1PvE>H-&XX9E}O4mMObYMTPC{$`6i zJm2lHwJ@zrTd-Z-fML$0%e5|Kyop8D?(&|Pk6GM&o6Zl3Diff=a>1h3pfeN;`jE_JYg{Bx~#uCdC%YEbcij`c9A6Ut(s`PoJYwQ!2 zweiWWbz#(r1vy^4ieT~^`TZ0Q3)RJo^CJ9&pi@YvchXD-1IFqqb6XR#M79GA6$V3f zD}#CAeD`H*V1@QQ=mY#6s z%n`re-wmcH@3RJDAtoFE2XaMQ`x#hytpiNHE>Sh4WlY0{kxsaDcEL4{2Uc{h^sTb4 zwyfz29d*XxniE(Y78|$;+r%svTbm;}mi^y~d`}3z=XR8WV3NL;40dTe0fzV(CX0Z( z;X;~=U3muYrZpMizjC?)c_4>T1ad9Pg1q)`oz4ouPF5f;bb>MC#nzH=si};HwJHZ= zUh}s^rORZT&44lctMIwimSpR-F!MZCO-%yA8|!M~dfFLph{5tqfSXmp@{GgsjJ5W+ z#UZ@moyoRf0n=pyPwQXgfd!fXPs4k`ylnG z78zi`>)3@VVic^)u?{ynTAs9fVtE(1+=`XSW&^KNuBO*SlJPFK&VY1SIUDV+O@Nlb zNirqbL@BD&ati0MjnC)n_yq!-hL({b644@Mra`QfXrvmz3O$6qWYEjWp>qlp#kr(X zsmxPdYihPB)CNuI3|z~${QP`ZmeioDFdEA% z%T2P`CbNEyzDj8^%oAJX>|(ywRJF9dv<`RFv#p__xIx!wYLdI8&8hDBe{P=dTT4r6 zi=wr>P2a8q)58L1o2pB@(C95+gm<&8r>95SQ|wbNF7=lOAUs}cbf`QmTap^N)}q&1 ze=Ig|ttkh@aeNS30$M?$80G;V9v(|J)tF|PemOaQt$jBUD-|nE5JD%ewSo!dTH|EF zItDRV@r?|}h+Dt)<9@1~D^2qP<}iX*p*%f6Cz4U1`!7Oft2_+e8_Dfew&pS4danh% zH&UQ2On~<$ikXuBQcqbccyGL%`PO@xN(Mp!>%EDps=114!wn3$E@O?2X| zA{h>xO>s6He2dL&jAXub-Xu6%!F?HUUuIFb+tb7NbT=`JJ-rNguDQ<@WFR;&;Iy7- z0ART@#w5L!0dKW1#^KKI!$WY~v4R2rEM48YhDrJ-0|x1YMCM!XBuN(;NeQMxY~*rz zp^L#7zf<6*yE3XoPQZ{ZNu$)2rI*FQADg$8YH~^;ebFfKyu7@cJ6=!~sN8CoCILXq z01z`preY`HFJ4wwmV^@POmTVpw+W1|vdVsIv;cA^P5Bho#u!nAc_1 z!QyU*#a->N)OR*?HkLO0rExwd9S4{U6HPWg%JP|@;m?H;?+K% z*ymjw^ZNp1AGDwZyEPQ@g{s35FjV_eJO+(*tTnG{3V-%Mlg&R9m6oI zD;ZMhaq-H?DiV-*O$J7@&g2b!t@5rjqejfd!39`1QB2rLM~WlWMwRj!`A&gYNV3aV zg4snPkx5jY*(i2OoYKZDi>y%{Lh}5G!k*KpaOKLB>JWzAp>nDk!ElW;j9OSDn-e=srAI#X2MILm2pRyd8;O1sH1+iAAXF(vbtSuv|+9yIGb zv(;E5vgvAZI~NnzHP%@ixc}=_&W45tOM|?zw8`aaY^L4T`DOrPTdTFLvE2ry%wMhR z>N0jY7rMNSi}3sj1uRs$$LVuCvXrj&HwN(i5i_h*L#Q!azC<3eM^hn@;X@v?RDGiW zQ*SJ_4%p(hL0duzxgd$r!@~u`Wd1D@tbA@ zfJdLqkZk_zEsO8f#lM+}f0uCnpgXQ@Fr)Adlma7-iw$BxVI{C?(vaDa8p(kAxgJ8#4kVc=!QG zgYoqAbQ;6Dt7vbAPSg(T&%F@aL*|Z$bfvZ>86s@@`Scs5R0V-Hj9(AWC4E_{@ ztPa<4F=J7<$Og+%&Mrs&ObkodW|qThG#h#=!bW#x(4?8|F~=Zh0hq160mHO5NP@cn zWpNvZ-49sct2Nsj>l_YMy``bOu@O>XL$lc(nBN6dLf;y0>ue7s7i4~Su&Yb4Fb1ix zqg&sj@^vj1_lEu50VO1KkRSrWR)xc`2FYl&UxF!E4>H1XRF8PTeANSnxE5Ap^-uv* zoWxlYEAJYMEekImrP63 zk6|D1_+d!$s)Vw1Cs>h9@;u*%_e3@$59W9k-dslM&GSNd_dyV|Xnpxzz$OYw&Xp`o zm(WEZNAZ^QmU_#adhbj}xp!7LnefFcyG`A*y=LE>NEJO-TdlewVTsT4TD>)1TYs%L znWDHL8+NiQu%RK+(BJ58@I_^7t%oe%@VyO5oo~ z{0mlj=US>`z!Vs(zNR;ce*J)c3DzzoXQZJ&Nl$~W-e%@o2#f&)_Fsd*BIV`#EZ+m5 z7nnla7h5d*7XEwyf3YO|X@He7OM|iQfe5fF7XGRM{<=omNBfhZ+&kXABCs;B%D39} zJ^U3Q1y;b3GPyi8L-GGX?7%eKoi;EAW zs6-`VupL*g_n+spJQb2^1B8_d66+FG=#6FwP=J;!UYgAYvw03#MPlZ;b784MPCRd( zah}Mk^?#0PA?}JG?$<#`(AJ3@vU(nP-PGPL)C8lsAhtDUV=A}Ut(u<-8QWfl&xSP! zP;G76HoP6qwxgp%QS``UMY*PnUa0jdk||pctU0WwHPJ_9ziQpi*5neP=j$bB&IS#B2umG&X?}JQgo-T zy~tYZD^Zn_WqJvwzO8(wai*r+I?H0HuIMxZc0aC`tW*5Axa6C3?0f8{jm4E#fF8R! zJjV{uGk2~9@*$(eI?rd7f&OBz_1QIb1rB+=slnV>(ByU*o2Bm7`MAe}ahxqJhL-Zy zV4J3Li(&VAyq%yX=zC0%{`LB80VxnWYuE)569>eBwsffn@Md6uaVKr6`I=iy-5WO0&SQvg~XSsxYiq!BRD7YzhL*EMJx{fE=W#q*Q>ZW*MMW zKoSDxH-Y)hxtMIu9Pu1-?mRt)6jrO)O4iiWf}_~&&IVZA1{dBupNr}A^K~tfR%mVQ z8OcT4g<%xn1*EQv{Sa3I&_dZ53d6wP<|jlnnr~5v2E>E-@W?Va!{z$r_{vozrkxN^ z&}$)!T8H4(E);~+1fGDx6yxCF=`3$8CSqhFr62SqGL0umGJe%H#t$J8!+xd%rLG@9 z^*hcK0o2fedXiAYbGwu>K#glM6N?%U05J{?Np7JIq|@#sd-9Y7K&OK&cP5BBLGZBt zS=~u+Whqo^5<*;6nFO;S2ZY-GU#6#z&fa)iVd-cuS*f=eJN0YF9%nXE$_sL5JEjM| z=>Wv-B7-RrK-_AsJgqg!H|@e=kcI08~uCJxzH95M|vs&2U515U&-atwGiVI*xS zwp14-m_j+y3i`>bk%tHNb;R60!d*$#8#97~mTu7;Jy zYhst@TP!9(N`tkk#%OcZ8tr!AmX3O()7Ic>bTrvqre>4dHs9r`21?Wj5yjP^=`2{_ z0#Uco>sr*X?!R2C4_1eq;bO3rHfrp*E|r5g zZi-hAx)PQl15-Y1A5o3k$Lz}-%k|^N6_%CGRfg5hHO>k1THB;;T`?QEIcjqTCI%+J zB`E<$@pyu4tjMIGMVVriI9sxplwkV>e3?v^oq=f;fOHU6RH|g$hHy0lAYO}MdkbiY zG6h8tEoQPR&wdRg14fyVu2h*)XFoE7o&&84KBuL{0BzO-3YoZ8R3~uMbFuweqM;E& z24o8d4afsv(9+V@)+TBr+xO}P*j^)F(Z%!bt%Ok3qh3iYUVN|yh4xoGG*dhv9l!?@ zKy9Q$0)}NiPrCRJJC{RP0#zpT(7|d5O{*s)n0PJ3nsw_AG|DVU3b2LmzrhRvMn>33 zJ5Xpl=wW*+wUBk0`3{i7GBC^~5*2`F*uXRF;29d39n=RP5;^u9mBO4$1M5+#@<(Jc zwOwPJfzOJ{EI^_Q3U%tGT3wO7SXxp5=*7hj+vu5kP`@C0&nlheFqkSFMiK0z;Iqqa zvWm=AbF5WW7W+J@RSY2oq-?7eGAU?v&V0U=vvaDSQP&iwxtYQ7|O zeUF;DB+u3ZW(@=Ij9JIb%c_>E#>o{c0W}h=@2yO5SIb885tW}xe6%b#KhXQz;FRbz!ADo_*;$(^r@30!i_{f83%1CMv1xF zGy~5EjKe0h(w+>T$eZbgJ)U-HJgXBTphoTi-Mv3o1RG<$Dxcb`iNnH=gYXV??3%2p z)5VLN#hoR#Qf-+QD2J)MdzLqe7+tWh6Hi7&FVHcZ-Px&zjS45wSuY49O5kKpd#ug_ z$#JY90Agm?vzI0LJ)2mBGhR@jzdg?1SGI~pqnp`FC;UAnY;sSZMB zW4tlR+*H72*_|C$WgoKv!bX;xlLA0!235YY-!DgNAUB!tCRI%DIv1iLn506!f*?u~ zDUgxLC@KtFJYY*L&C^0ODF(O!F9m7NMY}R^Q6_k)In&8<2`QxABB?mbm85b&A%Mc= zDnU)5GiIvo+@KffEnr#AEV-c{

>jvB^7I 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%0DT%_TnjOl3j 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%0D(aENKrK!I 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


LXIubh{7+88&Vkg6IzHkvbD+MxB)$`g*THN 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

yn!j+|jWJ7q$K{{<^9@a+}OFi)W) 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 bS~qSmZ!p7cIQ((zseg1^Uf1c$sK@dz`TmyD 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 index 80e7e42..050e2f0 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:23:39Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:39:38Z" }, "call": [ { @@ -36,7 +36,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "3d449a99fb6941a8a036d4fd4ccd2555" + "x-dfo-trace-id": "a206cc3a2b984f4d86c59e087aeb5cb1" }, "json": { "schema_version": 1, @@ -47,23 +47,24 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "3d449a99fb6941a8a036d4fd4ccd2555", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "a206cc3a2b984f4d86c59e087aeb5cb1", "warnings": [], "timing_ms": { - "total": 6074, + "total": 9180, "by_step": { "coverage": 0, - "extract": 1151, + "extract": 1234, + "exclusion_read": 639, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2241, - "output_tokens": 197, - "cached_tokens": 843, - "jev_input_tokens": 26478, - "jev_output_tokens": 5727 + "input_tokens": 2804, + "output_tokens": 206, + "cached_tokens": 0, + "jev_input_tokens": 28366, + "jev_output_tokens": 6095 }, "timed_out": false }, @@ -73,31 +74,31 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 3027, + "total": 6048, "by_step": { "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 4, - "shape_probe": 99, + "shape_arcs": 2, + "shape_probe": 105, "shape_groups": 6, "shape_labels": 1, - "shape_admission": 1, + "shape_admission": 2, "phase_derive_shapes": 0, - "shape": 206, + "shape": 232, "phase_prune_and_rank": 0, - "bind": 135, - "phase_bind": 13, + "bind": 124, + "phase_bind": 14, "phase_settle": 1, "phase_place_bindings": 32, "phase_facet_requests": 0, - "materialise": 108, + "materialise": 88, "phase_materialise": 26, - "answer": 749, - "phase_outcome": 1756 + "answer": 197, + "phase_outcome": 5333 } }, - "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", + "rendered_sentence": "2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", "sentence_plan": [ { "kind": "text", @@ -150,7 +151,7 @@ }, { "kind": "text", - "text": "per capita", + "text": "per 1,000 people", "segment": "heading", "entity_refs": [], "states": [] @@ -629,7 +630,7 @@ "source": "observed" } ], - "rendered_sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators.", + "rendered_sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators.", "sentence_plan": [ { "kind": "slot", @@ -674,11 +675,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [] + "states": [ + "unit:" + ] }, { "kind": "slot", @@ -816,7 +820,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -825,7 +829,8 @@ "confidence": "high", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "World Development Indicators" } }, { @@ -998,7 +1003,7 @@ "label": "data source" } ], - "member_count": 2978, + "member_count": 2979, "refine_supported": true, "data_commons": [ { @@ -2368,7 +2373,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2378,7 +2383,8 @@ "basis": "structural", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "Kenya Census" } } ], @@ -2406,29 +2412,29 @@ } ], "timing_ms": { - "total": 4844, + "total": 7934, "by_step": { - "recall": 440, + "recall": 871, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 114, + "shape_arcs": 140, "shape_probe_coverage": 1, - "shape_probe": 110, - "shape_groups": 48, + "shape_probe": 1522, + "shape_groups": 85, "shape_labels": 1, - "shape_admission": 0, + "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 430, + "shape": 1868, "phase_prune_and_rank": 0, - "bind": 142, - "phase_bind": 32, - "phase_settle": 18, - "phase_place_bindings": 3159, + "bind": 1021, + "phase_bind": 40, + "phase_settle": 66, + "phase_place_bindings": 3232, "phase_facet_requests": 0, - "materialise": 156, - "phase_materialise": 145, - "answer": 88, - "phase_outcome": 234 + "materialise": 213, + "phase_materialise": 142, + "answer": 243, + "phase_outcome": 238 } }, "rendered_sentence": "2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", @@ -3307,7 +3313,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3317,6 +3323,7 @@ "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "Air and GHG emissions", "open_axis_facts": [ { "property": "emittedThing", @@ -3806,7 +3813,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -3817,6 +3824,7 @@ "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "Air and GHG emissions", "open_axis_facts": [ { "property": "emittedThing", @@ -3849,7 +3857,7 @@ } } ], - "rendered_sentence": "Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. Emissions has 2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", + "rendered_sentence": "Mortality has 2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. Emissions has 2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", "sentence_plan": [ { "kind": "slot", @@ -3918,7 +3926,7 @@ }, { "kind": "text", - "text": "per capita", + "text": "per 1,000 people", "segment": "heading", "entity_refs": [], "states": [], @@ -4393,7 +4401,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "3b1149548ca74cb588cb0a6041e4fb22" + "x-dfo-trace-id": "ead2d3cd86864ecca5c476fce9267914" }, "json": { "schema_version": 1, @@ -4402,11 +4410,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "3b1149548ca74cb588cb0a6041e4fb22", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "ead2d3cd86864ecca5c476fce9267914", "warnings": [], "timing_ms": { - "total": 698, + "total": 744, "by_step": { "coverage": 0 } @@ -4419,19 +4427,39 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 335, + "total": 563, "by_step": { "validate": 0, + "phase_validate": 0, "walk": 0, "reread_arcs": 0, + "phase_reread_arcs": 0, "detect_edits": 0, + "phase_detect_edits": 0, "resolve_survivors": 0, - "shape": 178, + "phase_resolve_survivors": 0, + "shape": 284, + "phase_build_shape": 0, "bind": 0, + "phase_build_bindings": 0, "where_places": 1, - "materialise": 153, + "phase_where_places": 0, + "materialise": 184, + "phase_materialise": 0, + "ground_related": 1, + "ground_units": 0, + "ground_facets": 0, + "ground_convert": 0, "answer": 2, - "options": 1 + "ground_gates": 0, + "phase_ground_build": 2, + "finalize_preview": 0, + "options": 0, + "finalize_related": 88, + "finalize_wholes": 0, + "finalize_relaunch": 1, + "phase_finalize": 0, + "served_entry": 0 } }, "entity_refs": [], @@ -4766,7 +4794,7 @@ "source": "observed" } ], - "rendered_sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators.", + "rendered_sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators.", "sentence_plan": [ { "kind": "slot", @@ -4810,11 +4838,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [] + "states": [ + "unit:" + ] }, { "kind": "slot", @@ -4950,12 +4981,13 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9" + "capability_version": "cap_4913302d7a6b6435" }, "confidence": "high", "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "World Development Indicators", "related_group": { "ref": "dc/g/MortalityEvent", "label": "Mortality Event" @@ -5012,19 +5044,38 @@ } ], "timing_ms": { - "total": 1059, + "total": 1128, "by_step": { "validate": 0, - "walk": 769, - "reread_arcs": 1, + "phase_validate": 0, + "walk": 829, + "reread_arcs": 2, + "phase_reread_arcs": 0, "detect_edits": 0, + "phase_detect_edits": 0, "resolve_survivors": 0, - "shape": 12, - "bind": 1, - "where_places": 0, - "materialise": 190, - "answer": 9, - "options": 77 + "phase_resolve_survivors": 0, + "shape": 6, + "phase_build_shape": 0, + "bind": 0, + "phase_build_bindings": 0, + "where_places": 1, + "phase_where_places": 0, + "materialise": 196, + "phase_materialise": 0, + "ground_related": 1, + "ground_units": 0, + "ground_facets": 0, + "ground_convert": 0, + "answer": 7, + "ground_gates": 0, + "phase_ground_build": 4, + "finalize_preview": 0, + "options": 80, + "finalize_related": 0, + "finalize_wholes": 1, + "finalize_relaunch": 0, + "phase_finalize": 1 } }, "rendered_sentence": "2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", @@ -5865,12 +5916,13 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9" + "capability_version": "cap_4913302d7a6b6435" }, "confidence": "high", "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "Air and GHG emissions", "open_axis_facts": [ { "property": "emittedThing", @@ -6360,12 +6412,13 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9" + "capability_version": "cap_4913302d7a6b6435" }, "confidence": "high", "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "Air and GHG emissions", "open_axis_facts": [ { "property": "emittedThing", @@ -6398,7 +6451,7 @@ } } ], - "rendered_sentence": "Answered 1 of 2 parts. Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators. Emissions has 2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", + "rendered_sentence": "Answered 1 of 2 parts. Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators. Emissions has 2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", "sentence_plan": [ { "kind": "text", @@ -6461,11 +6514,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [], + "states": [ + "unit:" + ], "part_index": 0 }, { @@ -6745,7 +6801,7 @@ "answer": { "kind": "resolution", "status": "candidates", - "sentence": "Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. Emissions has 2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", + "sentence": "Mortality has 2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. Emissions has 2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", "complete": false, "specs": [], "gaps": [ @@ -6766,7 +6822,7 @@ "answer": { "kind": "resolution", "status": "mixed", - "sentence": "Answered 1 of 2 parts. Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators. Emissions has 2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", + "sentence": "Answered 1 of 2 parts. Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators. Emissions has 2 readings. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020. Kenya's annual amount of emissions: carbon dioxide. Air and GHG emissions · 2013 to 2020.", "complete": false, "specs": [ "spec_10bf62f9687154286b463d206f03a086" 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 index 0a15890..f94e628 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:23:59Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:40:01Z" }, "call": [ { @@ -36,7 +36,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "e46fa17bc1484e228c45bc2637a31869" + "x-dfo-trace-id": "1fc9c172c2444c3fa51175c7f8abdeec" }, "json": { "schema_version": 1, @@ -47,23 +47,24 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "e46fa17bc1484e228c45bc2637a31869", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1fc9c172c2444c3fa51175c7f8abdeec", "warnings": [], "timing_ms": { - "total": 3952, + "total": 7769, "by_step": { "coverage": 0, - "extract": 1129, + "extract": 1200, + "exclusion_read": 661, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2241, - "output_tokens": 196, - "cached_tokens": 843, - "jev_input_tokens": 20185, - "jev_output_tokens": 4309 + "input_tokens": 2804, + "output_tokens": 205, + "cached_tokens": 0, + "jev_input_tokens": 22045, + "jev_output_tokens": 4677 }, "timed_out": false }, @@ -73,31 +74,31 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 2818, + "total": 6428, "by_step": { - "recall": 1, - "phase_resolve_places": 1, + "recall": 222, + "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe": 98, - "shape_groups": 6, + "shape_arcs": 7, + "shape_probe": 204, + "shape_groups": 22, "shape_labels": 1, - "shape_admission": 1, + "shape_admission": 2, "phase_derive_shapes": 0, - "shape": 1214, + "shape": 354, "phase_prune_and_rank": 0, - "bind": 157, - "phase_bind": 24, + "bind": 159, + "phase_bind": 22, "phase_settle": 1, - "phase_place_bindings": 33, + "phase_place_bindings": 247, "phase_facet_requests": 0, - "materialise": 22, + "materialise": 5, "phase_materialise": 25, - "answer": 33, - "phase_outcome": 1307 + "answer": 32, + "phase_outcome": 5361 } }, - "rendered_sentence": "2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", + "rendered_sentence": "2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022.", "sentence_plan": [ { "kind": "text", @@ -150,7 +151,7 @@ }, { "kind": "text", - "text": "per capita", + "text": "per 1,000 people", "segment": "heading", "entity_refs": [], "states": [] @@ -629,7 +630,7 @@ "source": "observed" } ], - "rendered_sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators.", + "rendered_sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators.", "sentence_plan": [ { "kind": "slot", @@ -674,11 +675,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [] + "states": [ + "unit:" + ] }, { "kind": "slot", @@ -816,7 +820,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -825,7 +829,8 @@ "confidence": "high", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "World Development Indicators" } }, { @@ -998,7 +1003,7 @@ "label": "data source" } ], - "member_count": 2978, + "member_count": 2979, "refine_supported": true, "data_commons": [ { @@ -2368,7 +2373,7 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -2378,7 +2383,8 @@ "basis": "structural", "available_at_place": true, "measure_label_axes": [], - "measure_axis_values": [] + "measure_axis_values": [], + "published_tables": "Kenya Census" } } ], @@ -2393,21 +2399,21 @@ "variable_text": "savings", "warnings": [], "timing_ms": { - "total": 1496, + "total": 734, "by_step": { - "recall": 235, - "phase_resolve_places": 0, + "recall": 266, + "phase_resolve_places": 1, "phase_check_entities": 0, - "shape_arcs": 1, + "shape_arcs": 2, "shape_probe_coverage": 1, - "shape_probe": 96, - "shape_groups": 908, + "shape_probe": 122, + "shape_groups": 85, "shape_labels": 1, - "shape_admission": 6, - "phase_derive_shapes": 1, - "shape": 1119, + "shape_admission": 1, + "phase_derive_shapes": 0, + "shape": 343, "phase_prune_and_rank": 0, - "bind": 137, + "bind": 120, "phase_bind": 4 } }, @@ -2439,7 +2445,7 @@ } } ], - "rendered_sentence": "Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. No match for savings. Try a different wording or a related indicator.", + "rendered_sentence": "Mortality has 2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. No match for savings. Try a different wording or a related indicator.", "sentence_plan": [ { "kind": "slot", @@ -2508,7 +2514,7 @@ }, { "kind": "text", - "text": "per capita", + "text": "per 1,000 people", "segment": "heading", "entity_refs": [], "states": [], @@ -2745,7 +2751,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "cf171b52e7e34625bb6dba046e930821" + "x-dfo-trace-id": "c68a8610bb324cd5835c9b760233c346" }, "json": { "schema_version": 1, @@ -2754,11 +2760,11 @@ "extract_skipped": true }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "cf171b52e7e34625bb6dba046e930821", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "c68a8610bb324cd5835c9b760233c346", "warnings": [], "timing_ms": { - "total": 351, + "total": 375, "by_step": { "coverage": 0 } @@ -2771,19 +2777,39 @@ "variable_text": "mortality", "warnings": [], "timing_ms": { - "total": 283, + "total": 307, "by_step": { - "validate": 0, + "validate": 1, + "phase_validate": 0, "walk": 0, "reread_arcs": 0, + "phase_reread_arcs": 0, "detect_edits": 0, + "phase_detect_edits": 0, "resolve_survivors": 0, - "shape": 172, - "bind": 1, + "phase_resolve_survivors": 0, + "shape": 167, + "phase_build_shape": 0, + "bind": 0, + "phase_build_bindings": 0, "where_places": 0, - "materialise": 108, - "answer": 2, - "options": 0 + "phase_where_places": 0, + "materialise": 133, + "phase_materialise": 0, + "ground_related": 1, + "ground_units": 0, + "ground_facets": 0, + "ground_convert": 0, + "answer": 1, + "ground_gates": 0, + "phase_ground_build": 2, + "finalize_preview": 0, + "options": 1, + "finalize_related": 1, + "finalize_wholes": 0, + "finalize_relaunch": 0, + "phase_finalize": 0, + "served_entry": 0 } }, "entity_refs": [], @@ -3118,7 +3144,7 @@ "source": "observed" } ], - "rendered_sentence": "Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators.", + "rendered_sentence": "Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators.", "sentence_plan": [ { "kind": "slot", @@ -3162,11 +3188,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [] + "states": [ + "unit:" + ] }, { "kind": "slot", @@ -3302,12 +3331,13 @@ "start_year": 2013, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9" + "capability_version": "cap_4913302d7a6b6435" }, "confidence": "high", "available_at_place": true, "measure_label_axes": [], "measure_axis_values": [], + "published_tables": "World Development Indicators", "related_group": { "ref": "dc/g/MortalityEvent", "label": "Mortality Event" @@ -3387,7 +3417,7 @@ } } ], - "rendered_sentence": "Answered 1 of 2 parts. Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators. No match for savings. Try a different wording or a related indicator.", + "rendered_sentence": "Answered 1 of 2 parts. Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators. No match for savings. Try a different wording or a related indicator.", "sentence_plan": [ { "kind": "text", @@ -3450,11 +3480,14 @@ }, { "kind": "slot", - "text": "per capita", + "text": "per 1,000 people", "axis": "unit", "segment": "heading", + "binding_ref": "unit:", "entity_refs": [], - "states": [], + "states": [ + "unit:" + ], "part_index": 0 }, { @@ -3566,7 +3599,7 @@ "answer": { "kind": "resolution", "status": "mixed", - "sentence": "Mortality has 2 readings. Kenya's deaths rate per capita. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. No match for savings. Try a different wording or a related indicator.", + "sentence": "Mortality has 2 readings. Kenya's deaths rate per 1,000 people. World Development Indicators · 2013 to 2022. Kenya's number of deaths. Kenya Census · 2018 to 2022. No match for savings. Try a different wording or a related indicator.", "complete": false, "specs": [], "gaps": [ @@ -3587,7 +3620,7 @@ "answer": { "kind": "resolution", "status": "mixed", - "sentence": "Answered 1 of 2 parts. Kenya's deaths rate per capita, 2013 to 2022. World Development Indicators. No match for savings. Try a different wording or a related indicator.", + "sentence": "Answered 1 of 2 parts. Kenya's deaths rate per 1,000 people, 2013 to 2022. World Development Indicators. No match for savings. Try a different wording or a related indicator.", "complete": false, "specs": [ "spec_10bf62f9687154286b463d206f03a086" 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 index 9e2a4fb..c9743ac 100644 --- 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 @@ -30,7 +30,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1" + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0" }, "json": [ { @@ -42,21 +42,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -66,10 +67,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -119,7 +120,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", @@ -263,7 +266,7 @@ "error": { "class": "ContractError", "code": "contract_violation", - "trace_id": "01cf4a9623c449759f24d249f8783de1" + "trace_id": "1d05424fb2784068acf168d73a67c0d0" } } ] diff --git a/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous-twice.json b/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous-twice.json index 1365929..6df34c6 100644 --- a/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous-twice.json +++ b/python/client-contract/src/dfo_client_contract/scenarios/search-place-ambiguous-twice.json @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:23:14Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:39:07Z" }, "call": [ { @@ -31,7 +31,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "14c23c7a7a01430eb3f485e658ae7e51" + "x-dfo-trace-id": "c9d306b47a8e4b0a82b757bbe9e47469" }, "json": { "schema_version": 1, @@ -42,21 +42,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "14c23c7a7a01430eb3f485e658ae7e51", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "c9d306b47a8e4b0a82b757bbe9e47469", "warnings": [], "timing_ms": { - "total": 1535, + "total": 1059, "by_step": { "coverage": 0, - "extract": 1020, + "extract": 916, + "exclusion_read": 657, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2226, - "output_tokens": 106, - "cached_tokens": 840 + "input_tokens": 2774, + "output_tokens": 111, + "cached_tokens": 0 }, "timed_out": false }, @@ -66,9 +67,9 @@ "variable_text": "aid", "warnings": [], "timing_ms": { - "total": 377, + "total": 1, "by_step": { - "recall": 377, + "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0 } 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 index 27b7347..2018a7f 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:23:11Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:39:04Z" }, "call": [ { @@ -31,7 +31,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1" + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0" }, "json": { "schema_version": 1, @@ -42,21 +42,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -66,10 +67,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -119,7 +120,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", 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 index 6925a06..50d3183 100644 --- 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 @@ -61,7 +61,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1" + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0" }, "json": { "schema_version": 1, @@ -72,21 +72,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -96,10 +97,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -149,7 +150,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", 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 index a01b3dc..e0696da 100644 --- 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 @@ -60,7 +60,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1" + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0" }, "json": { "schema_version": 1, @@ -71,21 +71,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -95,10 +96,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -148,7 +149,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", 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 index 5f5376f..3a41791 100644 --- 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 @@ -38,7 +38,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1", + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0", "x-dfo-warning": "Search runs on a reduced index while it is rebuilt." }, "json": { @@ -50,21 +50,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -74,10 +75,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -127,7 +128,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", @@ -280,7 +283,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1", + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0", "x-dfo-warning": "Search runs on a reduced index while it is rebuilt.", "sunset": "Sat, 01 May 2027 00:00:00 GMT" }, @@ -293,21 +296,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -317,10 +321,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -370,7 +374,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", @@ -523,7 +529,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1", + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0", "x-dfo-warning": "Search answers from a cached release.", "deprecation": "@1777593600", "sunset": "Sat, 01 May 2027 00:00:00 GMT" @@ -537,21 +543,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -561,10 +568,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -614,7 +621,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", 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 index 9dc10a7..ba8450a 100644 --- 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 @@ -34,7 +34,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1", + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0", "sunset": "Sat, 01 May 2027 00:00:00 GMT" }, "json": { @@ -46,21 +46,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -70,10 +71,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -123,7 +124,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", @@ -276,7 +279,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "01cf4a9623c449759f24d249f8783de1", + "x-dfo-trace-id": "1d05424fb2784068acf168d73a67c0d0", "sunset": "Sat, 01 May 2027 00:00:00 GMT" }, "json": { @@ -288,21 +291,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "01cf4a9623c449759f24d249f8783de1", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "1d05424fb2784068acf168d73a67c0d0", "warnings": [], "timing_ms": { - "total": 1162, + "total": 1946, "by_step": { "coverage": 0, - "extract": 1040, + "extract": 1070, + "exclusion_read": 606, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 193, - "cached_tokens": 841 + "input_tokens": 2788, + "output_tokens": 202, + "cached_tokens": 0 }, "timed_out": false }, @@ -312,10 +316,10 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 117, + "total": 871, "by_step": { - "recall": 117, - "phase_resolve_places": 0, + "recall": 870, + "phase_resolve_places": 1, "phase_check_entities": 0 } }, @@ -365,7 +369,9 @@ "entity_refs": [ { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", 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 index 9e48a68..1aee07d 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:23:13Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:39:06Z" }, "call": [ { @@ -31,7 +31,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "5df79c87dd3c43589df5c2921f3c93e3" + "x-dfo-trace-id": "66ee9968495c4420baa91bae126c6a07" }, "json": { "schema_version": 1, @@ -42,21 +42,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "5df79c87dd3c43589df5c2921f3c93e3", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "66ee9968495c4420baa91bae126c6a07", "warnings": [], "timing_ms": { - "total": 1209, + "total": 1103, "by_step": { "coverage": 0, - "extract": 1202, + "extract": 1095, + "exclusion_read": 608, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2234, - "output_tokens": 207, - "cached_tokens": 841 + "input_tokens": 2790, + "output_tokens": 216, + "cached_tokens": 0 }, "timed_out": false }, @@ -122,11 +123,15 @@ "entity_refs": [ { "text": "Kenya", - "refs": [] + "refs": [ + "country/KEN" + ] }, { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", @@ -240,9 +245,9 @@ "variable_text": "ODA disbursements", "warnings": [], "timing_ms": { - "total": 2, + "total": 1, "by_step": { - "recall": 2, + "recall": 1, "phase_resolve_places": 0, "phase_check_entities": 0 } @@ -296,11 +301,15 @@ "entity_refs": [ { "text": "Kenya", - "refs": [] + "refs": [ + "country/KEN" + ] }, { "text": "Germany", - "refs": [] + "refs": [ + "country/DEU" + ] }, { "text": "Congo", 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 index 10533af..2b5cf25 100644 --- 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 @@ -5,8 +5,8 @@ "origin": { "kind": "recorded", "base_url": "https://dfo-dev-apis-zms5lj4zhq-nn.a.run.app/api", - "dfo_commit": "d80df9f5fd598b7345255470932d202ee5d49942", - "recorded_at": "2026-10-26T09:23:20Z" + "dfo_commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "recorded_at": "2026-11-01T07:39:13Z" }, "call": [ { @@ -38,7 +38,7 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "6cfb1ed8ec3e430a91c10329304d9af4" + "x-dfo-trace-id": "fe5a5b819e9e43ce9cd95964ad1bfa28" }, "json": { "schema_version": 1, @@ -49,21 +49,22 @@ "extract_skipped": false }, "diagnostics": { - "engine_build": "d80df9f5fd598b7345255470932d202ee5d49942", - "trace_id": "6cfb1ed8ec3e430a91c10329304d9af4", + "engine_build": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", + "trace_id": "fe5a5b819e9e43ce9cd95964ad1bfa28", "warnings": [], "timing_ms": { - "total": 1831, + "total": 1735, "by_step": { "coverage": 0, - "extract": 1224, + "extract": 1071, + "exclusion_read": 664, "cache_lookup": 0 } }, "llm_usage": { - "input_tokens": 2233, - "output_tokens": 188, - "cached_tokens": 841, + "input_tokens": 2788, + "output_tokens": 193, + "cached_tokens": 0, "jev_input_tokens": 4485, "jev_output_tokens": 849 }, @@ -88,7 +89,7 @@ "code": "whole_total_available", "severity": "info", "message": "The source publishes the total of every official donor as official donors (DAC); a sum of the listed donors includes private donors and differs from it.", - "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "spec_id": "spec_67170941f9982e1b0525932d4b816168", "params": { "total": "DACOfficialDonors", "total_label": "official donors (DAC)", @@ -97,30 +98,30 @@ } ], "timing_ms": { - "total": 603, + "total": 657, "by_step": { - "recall": 81, + "recall": 126, "phase_resolve_places": 0, "phase_check_entities": 0, - "shape_arcs": 3, - "shape_probe_coverage": 11, - "shape_probe": 116, - "shape_groups": 9, + "shape_arcs": 1, + "shape_probe_coverage": 12, + "shape_probe": 109, + "shape_groups": 6, "shape_labels": 0, "shape_admission": 1, "phase_derive_shapes": 0, - "shape": 227, + "shape": 216, "phase_prune_and_rank": 0, - "bind": 106, - "phase_bind": 16, - "phase_settle": 8, + "bind": 95, + "phase_bind": 19, + "phase_settle": 12, "phase_place_bindings": 1, "phase_facet_requests": 0, - "materialise": 38, - "phase_materialise": 5, - "answer": 19, - "options": 11, - "phase_outcome": 91 + "materialise": 42, + "phase_materialise": 4, + "answer": 36, + "options": 13, + "phase_outcome": 93 } }, "restatement": { @@ -175,10 +176,10 @@ ], "status": "definite", "spec": { - "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "spec_id": "spec_67170941f9982e1b0525932d4b816168", "definition": { "schema_version": 1, - "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "spec_id": "spec_67170941f9982e1b0525932d4b816168", "identity": { "identity_version": "spec1", "shape": { @@ -213,7 +214,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -235,7 +236,7 @@ "resolved": { "shape": { "shape_id": "financialflow_amount_measuredvalue_nominal_family_f096b1ba", - "label": "gross disbursements (official development assistance)", + "label": "net disbursements (official development assistance)", "population_type": { "ref": "FinancialFlow", "label": "financial flow" @@ -300,7 +301,7 @@ } ], "member_count": 1, - "member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "refine_supported": true, "data_commons": [ { @@ -365,8 +366,8 @@ "kind": "value", "value": { "ref": { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" }, "value_kind": "enum_value" } @@ -457,7 +458,7 @@ "coverage": { "kind": "exact", "has_data": true, - "observation_count": 110, + "observation_count": 111, "evidence": "facet_metadata", "dimensions": [ { @@ -485,46 +486,46 @@ "start_year": 2022, "end_year": 2022 }, - "observations": 110, - "series": 110, + "observations": 111, + "series": 111, "role_counts": { - "financingProvider": 110, + "financingProvider": 111, "financingRecipient": 1 }, "recent_years": [ { "year": 2022, - "observations": 110, - "series": 110, + "observations": 111, + "series": 111, "role_counts": { - "financingProvider": 110, + "financingProvider": 111, "financingRecipient": 1 } }, { "year": 2021, - "observations": 102, - "series": 102, + "observations": 103, + "series": 103, "role_counts": { - "financingProvider": 102, + "financingProvider": 103, "financingRecipient": 1 } }, { "year": 2020, - "observations": 90, - "series": 90, + "observations": 92, + "series": 92, "role_counts": { - "financingProvider": 90, + "financingProvider": 92, "financingRecipient": 1 } } ] }, "download": { - "rows": 110, + "rows": 111, "rows_exact": true, - "series": 110, + "series": 111, "window": { "start_year": 2022, "end_year": 2022 @@ -533,7 +534,7 @@ "label": "OECD Terms and Conditions" } }, - "coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "facets": { "provenance": { "basis": "fallback", @@ -579,60 +580,60 @@ "relation": "child", "parent": "DAC2aAidType206", "member_count": 2, - "served_rows": 23, + "served_rows": 27, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType201", - "label": "ODA grant" + "ref": "DAC2aAidType219", + "label": "recovery on ODA grants and capital subscriptions" }, "value_kind": "enum_value" }, "relation": "child", "parent": "DAC2aAidType206", "member_count": 1, - "served_rows": 109, + "served_rows": 23, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType207", - "label": "free-standing technical co-operation" + "ref": "DAC2aAidType209", + "label": "interest received on ODA lending" }, "value_kind": "enum_value" }, "relation": "root", "member_count": 1, - "served_rows": 42, + "served_rows": 11, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType213", - "label": "developmental food aid" + "ref": "DAC2aAidType250", + "label": "official development assistance excluding debt relief" }, "value_kind": "enum_value" }, "relation": "root", "member_count": 1, - "served_rows": 17, + "served_rows": 111, "served_rows_exact": true }, { "value": { "ref": { - "ref": "DAC2aAidType216", - "label": "humanitarian aid" + "ref": "DAC2aAidType255", + "label": "debt relief" }, "value_kind": "enum_value" }, "relation": "root", "member_count": 1, - "served_rows": 52, + "served_rows": 4, "served_rows_exact": true } ], @@ -682,11 +683,11 @@ "source": "observed" } ], - "rendered_sentence": "Gross disbursements to Ethiopia from 95 providers for official development assistance in 2022. Current US dollars · OECD DAC2a.", + "rendered_sentence": "Net disbursements to Ethiopia from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a.", "sentence_plan": [ { "kind": "slot", - "text": "Gross disbursements", + "text": "Net disbursements", "axis": "what", "segment": "heading", "entity_refs": [], @@ -727,7 +728,7 @@ }, { "kind": "slot", - "text": "95 providers", + "text": "96 providers", "segment": "heading", "role": "origin", "binding_ref": "origin:", @@ -925,8 +926,8 @@ "binding_kind": "value", "refs": [ { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" } ], "provenance": "measure_elected" @@ -982,7 +983,7 @@ "start_year": 2022, "end_year": 2022 }, - "capability_version": "cap_765c9d2a0c7529b9", + "capability_version": "cap_4913302d7a6b6435", "default_reading": { "applied": true, "removed_stat_vars": [] @@ -990,105 +991,8 @@ }, "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", + "alternative_measures": [], + "measure_label": "net disbursements", "measure_label_axes": [ "populationType", "measuredProperty", @@ -1128,16 +1032,19 @@ { "axis": "nettingBasis", "value": { - "ref": "Gross", - "label": "gross" + "ref": "Net", + "label": "net" } } ], + "concept_label": "official development assistance", + "published_tables": "OECD DAC2a", "role_axis_facts": [ { "role": "origin", - "member_count": 95, - "members_available": true + "member_count": 96, + "members_available": true, + "holds_multilaterals": true } ], "unit_conversion": { @@ -3086,16 +2993,260 @@ "role_currencies": { "destination": "ETB" } + }, + "scope_choices": { + "id": "spec_67170941f9982e1b0525932d4b816168", + "base": { + "schema_version": 1, + "spec_id": "spec_67170941f9982e1b0525932d4b816168", + "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 + }, + "open_roles": [ + "origin" + ] + } + }, + "rule_version": "scope1:3eef00a928eedd463ee48d02b79730da", + "entries": [], + "dropped_entries": [], + "choices": [ + { + "id": "spec_67170941f9982e1b0525932d4b816168:measure_basis", + "axis": "measure_basis", + "rule": "measure_basis_convention", + "provenance": "default", + "active": "measure_basis:net", + "options": [ + { + "option_id": "measure_basis:gross", + "label": "gross disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Gross" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:net", + "label": "net disbursements, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": "Net" + }, + "availability": { + "status": "available", + "detail": {} + } + }, + { + "option_id": "measure_basis:grant_equivalent", + "label": "grant equivalents (OECD headline), current USD", + "binding": { + "kind": "shape", + "measured_property": "grantEquivalent", + "netting_basis": null + }, + "availability": { + "status": "unavailable", + "code": "basis_not_published", + "detail": { + "dataset": "provenance/OECDDAC2A" + } + } + }, + { + "option_id": "measure_basis:commitments", + "label": "commitments, current USD", + "binding": { + "kind": "shape", + "measured_property": "amount", + "netting_basis": null + }, + "availability": { + "status": "unavailable", + "code": "basis_not_published", + "detail": { + "dataset": "provenance/OECDDAC2A" + } + } + } + ] + } + ], + "compiled": { + "spec_id": "spec_67170941f9982e1b0525932d4b816168", + "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 + }, + "open_roles": [ + "origin" + ] + }, + "components": [ + { + "role": "whole", + "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 + }, + "open_roles": [ + "origin" + ] + } + } + ] + }, + "ledger": [] } } } } ], - "rendered_sentence": "Gross disbursements to Ethiopia from 95 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.", + "rendered_sentence": "Net disbursements to Ethiopia from 96 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", + "text": "Net disbursements", "axis": "what", "segment": "heading", "entity_refs": [], @@ -3140,7 +3291,7 @@ }, { "kind": "slot", - "text": "95 providers", + "text": "96 providers", "segment": "heading", "role": "origin", "binding_ref": "origin:", @@ -3333,10 +3484,10 @@ "schema_version": 1, "input": { "kind": "spec_id", - "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "spec_id": "spec_67170941f9982e1b0525932d4b816168", "definition": { "schema_version": 1, - "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "spec_id": "spec_67170941f9982e1b0525932d4b816168", "identity": { "identity_version": "spec1", "shape": { @@ -3371,7 +3522,7 @@ "property": "nettingBasis", "binding": { "state": "value", - "ref": "Gross" + "ref": "Net" } } ], @@ -3402,13 +3553,13 @@ "status": 200, "headers": { "content-type": "application/json", - "x-dfo-trace-id": "003f90ea7c3b4c0ea7414ee5a282c0f4" + "x-dfo-trace-id": "a89965c1f5e744409ef6370942f1fc70" }, "json": { "schema_version": 1, "definition": { "schema_version": 1, - "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", + "spec_id": "spec_67170941f9982e1b0525932d4b816168", "identity": { "shape": { "kind": "statvar_schema", @@ -3440,7 +3591,7 @@ }, { "binding": { - "ref": "Gross", + "ref": "Net", "state": "value" }, "property": "nettingBasis" @@ -3462,14 +3613,14 @@ } } }, - "content_version": "cv_c17d6a131cb4556543b91556e46814e9", - "prepared_at": "2026-10-20T16:52:43Z", + "content_version": "cv_219fc5386675dcca1fc91197c39ac885", + "prepared_at": "2026-10-28T22:26:00Z", "coverage": { - "rows": 95, + "rows": 96, "dimensions": [ { "label": "financingProvider", - "count": 95, + "count": 96, "axis": "origin", "noun": { "singular": "provider", @@ -3580,6 +3731,29 @@ ] }, "trace": { + "party_totals_left_out": [ + { + "role": "financingProvider", + "provenance": "provenance/OECDDAC2A", + "entities": [ + "AfricanDevelopmentBankGroup", + "DACCountriesTotal", + "DACEUMembers", + "DACEUMembersAndEUInstitutions", + "DACMultilaterals", + "DACNonDACCountries", + "DACOfficialDonors", + "DACOtherMultilateralOrganisations", + "DACPrivateDonors", + "DACRegionalDevelopmentBanks", + "DACUnitedNations", + "DACWorldBank", + "GroupOfSeven", + "PostcodeLotteryGroup", + "WorldBankGroup" + ] + } + ], "facets": [ { "ref": "provenance/OECDDAC2A", @@ -3615,11 +3789,11 @@ "end_year": 2022, "start_year": 2022 }, - "graph_revision": "dfo-dev-dc-datacommons-service-00259-rpx", + "graph_revision": "dfo-dev-dc-datacommons-service-00275-9t9", "normalisations": [], "code_index_stamp": { - "exported_at": "2026-10-20T13:18:18Z", - "content_hash": "602c7022fc21c17540a6873d93196ad6b967eaae3e71f9dce6dec178a735daf4", + "exported_at": "2026-10-28T17:28:18Z", + "content_hash": "3d946d8f4986dbbe0fa3e5c4c917200381f529d89ce417c11daeb22df56eed99", "graph_endpoint": "graph_release" }, "source_revisions": [ @@ -3628,46 +3802,24 @@ "revision": "2026-10-15" } ], - "capability_version": "dset_1e6cd9546fac19e9", - "materialiser_build": "7175fe98eec005479f1397936dc011ad120092d5", + "capability_version": "dset_4c514fc1069d2b93", + "materialiser_build": "972c58bef62fbfc8baad54f8473fe465779025b0", "resolved_stat_vars": [ { - "ref": "dcid:Amount_FinancialFlow_Gross_Disbursement_DAC2aAidType206_Nominal", + "ref": "dcid:Amount_FinancialFlow_Net_Disbursement_DAC2aAidType206_Nominal", "roles": [ "financingProvider", "financingRecipient" ], - "observation_count": 110 + "observation_count": 111 } ], "family_member_count": 1, - "family_member_digest": "1a36e1a7292b1bfff95a5415de0be74cac7bb033217ed50e79faa8ce51a224c0", + "family_member_digest": "c2d373442ac21a31377df76cd343f156c72a530649757c399c6661cbf56c9a71", "frame_grammar_version": "1.1.0", - "party_totals_left_out": [ - { - "role": "financingProvider", - "entities": [ - "AfricanDevelopmentBankGroup", - "DACCountriesTotal", - "DACEUMembers", - "DACEUMembersAndEUInstitutions", - "DACMultilaterals", - "DACNonDACCountries", - "DACOfficialDonors", - "DACOtherMultilateralOrganisations", - "DACPrivateDonors", - "DACRegionalDevelopmentBanks", - "DACUnitedNations", - "DACWorldBank", - "GroupOfSeven", - "PostcodeLotteryGroup", - "WorldBankGroup" - ] - } - ], - "origin_catalogue_build_id": "20261019T174519Z-2e5e8cfd", - "served_from": "head", - "confirmed_at": "2026-10-26T09:23:22.526168+00:00" + "origin_catalogue_build_id": "20261027T131516Z-80bb1497", + "served_from": "materialise", + "confirmed_at": "2026-11-01T07:39:16.229411+00:00" }, "warnings": [], "diagnostics": [ @@ -3679,35 +3831,35 @@ ], "artifacts": [ { - "artifact_digest": "sha256:d2ea67ebd67a84915c8e97a7ef4b66733e2d624a1cc5d1c927d6673c8c2f668e", + "artifact_digest": "sha256:89fdd6dc3600cd739f88cdf8d948aab75c11754ef3c244cddcc1daed31bab64b", "rendering": { "bundle": false, "format": "parquet", "layout": 4, "without_party_totals": true }, - "bytes": 10329, + "bytes": 10345, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-24T20:59:40.869991+00:00", + "created_at": "2026-10-28T22:26:00.878026+00:00", "tier": "working", - "url": "/api/datasets/spec_7778beed72f8433bb7fde4293acfd175/cv_c17d6a131cb4556543b91556e46814e9/files/sha256:d2ea67ebd67a84915c8e97a7ef4b66733e2d624a1cc5d1c927d6673c8c2f668e", - "enrichment_stamp": "08ed6c734fc69ea2204a21f4e1dd8b963f14dd1e03a2484c618049ac2e2d93d8" + "url": "/api/datasets/spec_67170941f9982e1b0525932d4b816168/cv_219fc5386675dcca1fc91197c39ac885/files/sha256:89fdd6dc3600cd739f88cdf8d948aab75c11754ef3c244cddcc1daed31bab64b", + "enrichment_stamp": "55887b871f7aa1c5d120cb2bee97086605351d5acfbec645ab027f562d0f65c5" }, { - "artifact_digest": "sha256:d59c03c57a8ea2d1da95b4fb2b1131919e8a13b2003ef51fc1b3801ca46be960", + "artifact_digest": "sha256:f34567332e3a45cb8357bd587f254a3126f03f085e2fdc32afb1ec54e068fe01", "rendering": { "statistics": "series" }, - "bytes": 9527, + "bytes": 9569, "media_type": "application/vnd.apache.parquet", - "created_at": "2026-10-23T22:01:14.760267+00:00", + "created_at": "2026-10-28T22:26:00.878026+00:00", "tier": "working", - "url": "/api/datasets/spec_7778beed72f8433bb7fde4293acfd175/cv_c17d6a131cb4556543b91556e46814e9/files/sha256:d59c03c57a8ea2d1da95b4fb2b1131919e8a13b2003ef51fc1b3801ca46be960" + "url": "/api/datasets/spec_67170941f9982e1b0525932d4b816168/cv_219fc5386675dcca1fc91197c39ac885/files/sha256:f34567332e3a45cb8357bd587f254a3126f03f085e2fdc32afb1ec54e068fe01" } ], - "series_count": 95, + "series_count": 96, "output_options": { - "capability_version": "dset_76f5fa7244511c58", + "capability_version": "dset_5282a0674178a233", "columns": [ { "name": "stat_var", @@ -3719,7 +3871,7 @@ "name": "financingProvider", "kind": "role", "droppable": false, - "distinct": 95 + "distinct": 96 }, { "name": "financingRecipient", @@ -3787,8 +3939,8 @@ "state": "partial", "reason": "enrichment_unavailable", "coverage": { - "entities": 95, - "covered": 40 + "entities": 96, + "covered": 41 }, "missing": [ { @@ -3832,7 +3984,8 @@ "label": "Dutch Postcode Lottery" } ], - "truncated": true + "truncated": true, + "in_long_layout": false }, { "column": "financingProvider", @@ -3841,8 +3994,8 @@ "state": "partial", "reason": "enrichment_unavailable", "coverage": { - "entities": 95, - "covered": 40 + "entities": 96, + "covered": 41 }, "missing": [ { @@ -3886,7 +4039,8 @@ "label": "Dutch Postcode Lottery" } ], - "truncated": true + "truncated": true, + "in_long_layout": false }, { "column": "financingProvider", @@ -3894,11 +4048,12 @@ "token": "financingProvider_label", "state": "available", "coverage": { - "entities": 95, - "covered": 95 + "entities": 96, + "covered": 96 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -3906,11 +4061,12 @@ "token": "financingProvider_type", "state": "available", "coverage": { - "entities": 95, - "covered": 95 + "entities": 96, + "covered": 96 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingProvider", @@ -3918,11 +4074,12 @@ "token": "financingProvider_party_kind", "state": "available", "coverage": { - "entities": 95, - "covered": 95 + "entities": 96, + "covered": 96 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -3930,11 +4087,12 @@ "token": "financingProvider_party_class", "state": "available", "coverage": { - "entities": 95, - "covered": 95 + "entities": 96, + "covered": 96 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingProvider", @@ -3942,11 +4100,12 @@ "token": "financingProvider_party_whole", "state": "available", "coverage": { - "entities": 95, - "covered": 95 + "entities": 96, + "covered": 96 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -3958,7 +4117,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -3970,7 +4130,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -3982,7 +4143,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -3994,7 +4156,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": false }, { "column": "financingRecipient", @@ -4006,7 +4169,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4018,7 +4182,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true }, { "column": "financingRecipient", @@ -4030,7 +4195,8 @@ "covered": 1 }, "missing": [], - "truncated": false + "truncated": false, + "in_long_layout": true } ], "long_layout_defaults": [ @@ -4061,10 +4227,10 @@ ] } }, - "series_coverage_stamp": "e6e717ab8c77e84d010915893ede5809e9ecec67929a07cfafbcc2210edfa1eb", + "series_coverage_stamp": "ad27fd11738abb03d2d84dc214e223f04781609636cf678d0d08c385fb863d99", "retention": { "pinned": false, - "held_until": "2026-11-22T22:01:14.671345Z" + "held_until": "2026-11-27T22:26:00.878555Z" } } } @@ -4072,21 +4238,21 @@ { "request": { "method": "GET", - "origin_path": "/api/datasets/spec_7778beed72f8433bb7fde4293acfd175/cv_c17d6a131cb4556543b91556e46814e9/files/sha256:d2ea67ebd67a84915c8e97a7ef4b66733e2d624a1cc5d1c927d6673c8c2f668e" + "origin_path": "/api/datasets/spec_67170941f9982e1b0525932d4b816168/cv_219fc5386675dcca1fc91197c39ac885/files/sha256:89fdd6dc3600cd739f88cdf8d948aab75c11754ef3c244cddcc1daed31bab64b" }, "response": { "status": 302, "headers": { "content-type": "text/html", - "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ad2ea67ebd67a84915c8e97a7ef4b66733e2d624a1cc5d1c927d6673c8c2f668e?X-Goog-Signature=redacted", - "x-dfo-trace-id": "014016fd216a48729c10484f342a83a6" + "location": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A89fdd6dc3600cd739f88cdf8d948aab75c11754ef3c244cddcc1daed31bab64b?X-Goog-Signature=redacted", + "x-dfo-trace-id": "29811201aab2444fb90d67f48ec12ae7" } } }, { "request": { "method": "GET", - "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3Ad2ea67ebd67a84915c8e97a7ef4b66733e2d624a1cc5d1c927d6673c8c2f668e?X-Goog-Signature=redacted" + "url": "https://storage.googleapis.com/dev-fin-observatory-datasets-working/sha256%3A89fdd6dc3600cd739f88cdf8d948aab75c11754ef3c244cddcc1daed31bab64b?X-Goog-Signature=redacted" }, "response": { "status": 200, @@ -4102,10 +4268,10 @@ "answer": { "kind": "resolution", "status": "definite", - "sentence": "Gross disbursements to Ethiopia from 95 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": "Net disbursements to Ethiopia from 96 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" + "spec_67170941f9982e1b0525932d4b816168" ], "gaps": [] } @@ -4114,12 +4280,12 @@ "error": { "class": "SearchWarning", "code": null, - "trace_id": "6cfb1ed8ec3e430a91c10329304d9af4" + "trace_id": "fe5a5b819e9e43ce9cd95964ad1bfa28" } }, { "dataset": { - "rows": 95, + "rows": 96, "columns": [ "time_period", "financingProvider_label", @@ -4148,9 +4314,9 @@ "parts": [ "aid" ], - "spec_id": "spec_7778beed72f8433bb7fde4293acfd175", - "content_version": "cv_c17d6a131cb4556543b91556e46814e9", - "sentence": "Gross disbursements to Ethiopia from 95 providers for official development assistance in 2022. Current US dollars · OECD DAC2a." + "spec_id": "spec_67170941f9982e1b0525932d4b816168", + "content_version": "cv_219fc5386675dcca1fc91197c39ac885", + "sentence": "Net disbursements to Ethiopia from 96 providers for official development assistance in 2022. Current US dollars · OECD DAC2a." } ], "missing": [], 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 index 91ee4ccd9504fc0bbbc390e72b261114c4904bae..dd4bcb05a63b9637f2e6103affbbd64d326cda01 100644 GIT binary patch delta 2178 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 MXbXKakX|_c0w=0P-~a#s diff --git a/python/client-contract/src/dfo_client_contract/served/SOURCE.json b/python/client-contract/src/dfo_client_contract/served/SOURCE.json index 8d5b00b..b2a1b2d 100644 --- a/python/client-contract/src/dfo_client_contract/served/SOURCE.json +++ b/python/client-contract/src/dfo_client_contract/served/SOURCE.json @@ -1,6 +1,6 @@ { "format_version": 1, "repository": "DevelopmentFinanceObservatory/apis", - "commit": "d80df9f5fd598b7345255470932d202ee5d49942", + "commit": "ccb6617922c839ce3cd5615a3bbb65c70bfe1bde", "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 index c5ab609..c7ecad7 100644 --- a/python/client-contract/src/dfo_client_contract/served/openapi.json +++ b/python/client-contract/src/dfo_client_contract/served/openapi.json @@ -1020,6 +1020,282 @@ } } }, + "/api/datasets/analysis": { + "post": { + "tags": [ + "Datasets" + ], + "summary": "Post Analysis", + "description": "Compute a recipe tree and store its frame. Answers the stored frame's format 2 ref,\n`pending` while a root builds, or the refusal with its fix.", + "operationId": "datasets_post_analysis", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnalysisRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnalysisReady" + } + } + } + }, + "202": { + "description": "Accepted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnalysisPendingBody" + } + } + } + }, + "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/analysis/anchor": { + "post": { + "tags": [ + "Datasets" + ], + "summary": "Post Analysis Anchor", + "description": "The latest period of the roots over the populations, and the series it leaves\nout. Stores nothing.", + "operationId": "datasets_post_analysis_anchor", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnchorRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnchorAnswer" + } + } + } + }, + "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/derived/{id}/{content_version}": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Derived", + "description": "A derived frame's retention, recipe, roots, citation, resolved periods and the\nseries its steps left out for missing data.", + "operationId": "datasets_get_derived", + "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/DerivedManifest" + } + } + } + }, + "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/derived/{id}/{content_version}/file": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Derived File", + "description": "The derived frame's rows as a file in the format and bundle the query names.", + "operationId": "datasets_get_derived_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": { + "200": { + "description": "the file's bytes", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "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": [ @@ -1756,7 +2032,7 @@ "Datasets" ], "summary": "Post Pin", - "description": "Pin an artifact of a version, and the first frame its files can render from that survives, servable or aged: the version's own frame, else, for a derived version, its base version's frame. Every format then stays fetchable and the version reports `retention.pinned`. When no such frame's bytes survive, the named artifact still pins, and `retention` keeps the frames' `held_until`. Only the named artifact's copy waits on the daily pin budget; the frame copy skips it and counts toward later calls, so one pin can add up to two copies to the count.", + "description": "Pin an artifact of a version, and the first frame its files can render from that survives, servable or aged: the version's own frame, else, for a derived version, its base version's frame. Every format then stays fetchable and the version reports `retention.pinned`. When no such frame's bytes survive, the named artifact still pins, and `retention` keeps the frames' `held_until`. Only the named artifact's copy spends the daily pin budget, and the frame copy spends none. A caller without the pin grant also spends one unit of its daily pin allowance on a new copy, within a daily budget shared by every such caller; a repeat pin of an artifact already pinned spends nothing.", "operationId": "datasets_post_pin", "parameters": [ { @@ -1874,12 +2150,118 @@ } } }, - "/api/graph/healthz": { - "get": { + "/api/datasets/exports": { + "post": { "tags": [ - "Graph" + "Datasets" ], - "summary": "Get Health", + "summary": "Post Export", + "description": "Prepare one exact frame version as a file in the pinned tier and answer its facts\nand its link's path. A frame of a dataset id alone exports that dataset's newest\nversion, which the answer's `frame` names. A repeat request answers the same facts and\nspends nothing. A new pinned copy spends one unit of the caller's daily pin\nallowance.", + "operationId": "datasets_post_export", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportRequestBody" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportResponse" + } + } + } + }, + "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/exports/{export_id}": { + "get": { + "tags": [ + "Datasets" + ], + "summary": "Get Export", + "description": "Redirect to the export's file, signed for five minutes. Renders nothing.", + "operationId": "datasets_get_export", + "parameters": [ + { + "name": "export_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Export Id" + } + } + ], + "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/graph/healthz": { + "get": { + "tags": [ + "Graph" + ], + "summary": "Get Health", "operationId": "graph_get_health", "responses": { "200": { @@ -3144,6 +3526,101 @@ } } }, + "/api/presentation/frames/{spec_id}": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Get Newest Frame", + "operationId": "presentation_get_newest_frame", + "parameters": [ + { + "name": "spec_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Spec Id" + } + }, + { + "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. The frame is the newest version of the dataset `spec_id` names, the version the analysis runner reads for a Spec root; `spec_id` and `content_version` name it. The view reads that version's canonical frame, as the pair route does, so it holds no default enrichment column, and a `dimension` naming one refuses `binding_invalid`.", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/NewestFrameStructuralViewResponse" + }, + { + "$ref": "#/components/schemas/NewestFrameDimensionValuesResponse" + }, + { + "$ref": "#/components/schemas/NewestFrameFilteredViewResponse" + } + ], + "title": "Response 200 Presentation Get Newest 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": [ @@ -3175,21 +3652,74 @@ } } }, - "/codes/{code}": { + "/api/presentation/shares": { + "post": { + "tags": [ + "Presentation" + ], + "summary": "Create Share", + "description": "Publish cards as a share: one slot per card, a live link (latest=true) that follows new data or a snapshot (latest=false) that keeps the versions its cards draw now. Every card's frame is pinned. Spends one unit of the caller's daily share allowance, and one unit of its daily pin allowance and of the shared pin budgets for each new pinned copy. The reply's write_token grants replacing and deleting the share.", + "operationId": "presentation_create_share", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateShareBody" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SharedResponse" + } + } + } + }, + "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/shares/{share_id}": { "get": { "tags": [ - "Codes" + "Presentation" ], - "summary": "Get Code", - "operationId": "codes_get_code", + "summary": "Read Share", + "description": "Read a share: its kind, mode, title, latest revision, slots and the website's payload. Any origin may read it. It omits the write token.", + "operationId": "presentation_read_share", "parameters": [ { - "name": "code", + "name": "share_id", "in": "path", "required": true, "schema": { "type": "string", - "title": "Code" + "title": "Share Id" } } ], @@ -3199,7 +3729,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CodeRegistryEntry" + "$ref": "#/components/schemas/ShareReadResponse" } } } @@ -3225,510 +3755,3040 @@ } } } - } - } - }, - "components": { - "schemas": { - "AggregateNode": { - "properties": { - "ref": { - "type": "string", - "title": "Ref", - "description": "the node's dcid" - }, - "label": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" + }, + "put": { + "tags": [ + "Presentation" + ], + "summary": "Replace Share", + "description": "Give a live share new cards under the same URLs, as its next revision. Slot n shows the nth card, and slots past the last card stay empty. Needs the share's write token in x-dfo-write-token. A snapshot refuses share_not_replaceable. Each new pinned copy spends one unit of the caller's daily pin allowance and of the shared pin budgets.", + "operationId": "presentation_replace_share", + "parameters": [ + { + "name": "share_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Share 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/ShareCardsBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareWriteResponse" + } + } + } + }, + "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" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Presentation" + ], + "summary": "Delete Share", + "description": "Take a share down. Needs the share's write token in x-dfo-write-token.", + "operationId": "presentation_delete_share", + "parameters": [ + { + "name": "share_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Share Id" + } + }, + { + "name": "x-dfo-write-token", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "X-Dfo-Write-Token" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "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/shares/{share_id}/snapshot": { + "post": { + "tags": [ + "Presentation" + ], + "summary": "Post Share Snapshot", + "description": "Turn a live share into a snapshot under the same URLs. Each slot keeps the frame it serves now, pinned. Needs the share's write token in x-dfo-write-token. A snapshot answers as it is. No route turns a snapshot live. Each new pinned copy spends one unit of the caller's daily pin allowance and of the shared pin budgets.", + "operationId": "presentation_post_share_snapshot", + "parameters": [ + { + "name": "share_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Share Id" + } + }, + { + "name": "x-dfo-write-token", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "X-Dfo-Write-Token" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareWriteResponse" + } + } + } + }, + "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/shares/{share_id}/import": { + "put": { + "tags": [ + "Presentation" + ], + "summary": "Put Share Import", + "description": "Store one of the website's shares under its own id, for the website's share migration job. Admits the share import principal alone. The body is the share's export line less its id, plus write_token_sha256. Pins the frames the share shows, spending no allowance. 201 when stored, 200 when an earlier import stored it.", + "operationId": "presentation_put_share_import", + "parameters": [ + { + "name": "share_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Share Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareImport" + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareImportResponse" + } + } + } + }, + "200": { + "description": "An earlier import stored this share, which is left as it is.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareImportResponse" + } + } + } + }, + "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/shares/{share_id}/history": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Read Share History", + "description": "What each of the share's slots showed, newest first, a page of up to limit entries (default 100) at a time: every frame it served, with its retention counted from when DFO stored it and whether it is still fetchable, and an entry with a null card and frame from when a replace left the slot empty. next names the following page's cursor, to send as before, and is null on the last page. Any origin may read it.", + "operationId": "presentation_read_share_history", + "parameters": [ + { + "name": "share_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Share Id" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 500, + "minimum": 1, + "description": "the most entries the page holds, 1 to 500", + "default": 100, + "title": "Limit" + }, + "description": "the most entries the page holds, 1 to 500" + }, + { + "name": "before", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "the `next` cursor of the previous page; the page continues after that page's last entry", + "title": "Before" + }, + "description": "the `next` cursor of the previous page; the page continues after that page's last entry" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareHistoryResponse" + } + } + } + }, + "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/shares/{share_id}/slots/{slot}": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Read Share Slot Card", + "description": "Read the card a share's slot shows, drawn on the frame the slot serves. That is a snapshot's recorded frame, or a live slot's newest data, checked at most every 15 minutes, as the slot's data route chooses it.", + "operationId": "presentation_read_share_slot_card", + "parameters": [ + { + "name": "share_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Share Id" + } + }, + { + "name": "slot", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "minimum": 1, + "title": "Slot" + } + }, + { + "name": "if-none-match", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "If-None-Match" + } + } + ], + "responses": { + "200": { + "description": "The slot's card as a component read states it, drawn on the frame the slot's data route serves, with that frame's retention and the freshness. x-dfo-freshness and a live slot's x-dfo-checked-at are the data route's. A strong ETag answers If-None-Match with 304. Any origin may read it.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareSlotCardResponse" + } + } + } + }, + "304": { + "description": "The If-None-Match ETag still names this card." + }, + "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/shares/{share_id}/slots/{slot}/data": { + "get": { + "tags": [ + "Presentation" + ], + "summary": "Read Share Slot Data", + "description": "Read the rows a share's slot serves. The frame is a snapshot's recorded frame, or a live slot's newest data, checked at most every 15 minutes.", + "operationId": "presentation_read_share_slot_data", + "parameters": [ + { + "name": "share_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Share Id" + } + }, + { + "name": "slot", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "minimum": 1, + "title": "Slot" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/SlotFormat", + "default": "json" + } + }, + { + "name": "bundle", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Bundle" + } + }, + { + "name": "if-none-match", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "If-None-Match" + } + } + ], + "responses": { + "200": { + "description": "The rows behind the slot's card. JSON (the default) states the slot, its card and frame and the freshness beside the rows; csv, xlsx and parquet are the card's data file, and bundle=true serves the components data route's zip around it. x-dfo-freshness states current, stale or pending, and a live slot's x-dfo-checked-at when DFO last checked for newer data. A strong ETag answers If-None-Match with 304. Any origin may read it.", + "content": { + "application/zip": {}, + "text/csv": {}, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {}, + "application/vnd.apache.parquet": {}, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShareSlotDataResponse" + } + } + } + }, + "304": { + "description": "The If-None-Match ETag still names these rows." + }, + "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" + } + } + } + } + } + } + }, + "/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." + }, + "AnalysisPendingBody": { + "properties": { + "status": { + "type": "string", + "const": "pending", + "title": "Status", + "default": "pending" + }, + "retry_after_s": { + "type": "number", + "title": "Retry After S" + }, + "operations": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Operations", + "description": "the queued rebuilds the run waits on" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "retry_after_s", + "operations" + ], + "title": "AnalysisPendingBody" + }, + "AnalysisReady": { + "properties": { + "status": { + "type": "string", + "const": "ready", + "title": "Status", + "default": "ready" + }, + "ref": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "object", + "title": "Ref", + "description": "the format 2 DatasetRef naming the frame" + }, + "frame_content_version": { + "type": "string", + "pattern": "^cv_[0-9a-f]{32}$", + "title": "Frame Content Version" + }, + "output_digest": { + "type": "string", + "pattern": "^out_[0-9a-f]{32}$", + "title": "Output Digest" + }, + "summary": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "object", + "title": "Summary", + "description": "the facts of the tree's top step: the verb, its canonical parameters, the result's shape and exclusions, and the engine result's own fields" + }, + "rows": { + "type": "integer", + "minimum": 0.0, + "title": "Rows" + }, + "role_keys": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Role Keys" + }, + "stat_var_count": { + "type": "integer", + "minimum": 0.0, + "title": "Stat Var Count" + }, + "exclusions": { + "items": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "object" + }, + "type": "array", + "title": "Exclusions" + }, + "time": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "object", + "title": "Time" + }, + "execution_identity": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Execution Identity" + }, + "resolved_periods": { + "items": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "object" + }, + "type": "array", + "title": "Resolved Periods", + "description": "each period the recipe states relative to the latest, with its period" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ref", + "frame_content_version", + "output_digest", + "summary", + "rows", + "role_keys", + "stat_var_count", + "exclusions", + "time", + "execution_identity", + "resolved_periods" + ], + "title": "AnalysisReady", + "description": "The stored frame of a computed tree." + }, + "AnalysisRequest": { + "properties": { + "tree": { + "oneOf": [ + { + "$ref": "#/components/schemas/StepNode" + }, + { + "$ref": "#/components/schemas/DerivedRoot" + } + ], + "title": "Tree" + }, + "latest": { + "type": "boolean", + "title": "Latest", + "default": false + }, + "rolling": { + "anyOf": [ + { + "type": "string", + "const": "tree" + }, + { + "type": "null" + } + ], + "title": "Rolling" + }, + "anchor_roots": { + "anyOf": [ + { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/SpecRoot" + }, + { + "$ref": "#/components/schemas/DatasetRoot" + } + ] + }, + "type": "array", + "maxItems": 64, + "minItems": 1 + }, + { + "type": "null" + } + ], + "title": "Anchor Roots" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "tree" + ], + "title": "AnalysisRequest", + "description": "`POST /api/datasets/analysis`: the tree to compute, and whether its roots follow their\ndatasets' newest versions. A `tree` that is a derived root alone computes that frame's\nstored recipe again, so `latest` reads it on its datasets' newest versions under the\nrecipe's own ids. `rolling` `\"tree\"` takes the populations and the latest period of every\nrolling overlay a derived root's recipe holds from the whole tree, so derived rolling inputs\nare computed again under one latest period. Left out, each keeps its stored populations and\nperiods." + }, + "AnchorAnswer": { + "properties": { + "period": { + "type": "string", + "title": "Period" + }, + "rule": { + "type": "string", + "title": "Rule" + }, + "left_out": { + "items": { + "$ref": "#/components/schemas/LeftOutSeriesBody" + }, + "type": "array", + "title": "Left Out" + }, + "roots": { + "items": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "type": "array", + "title": "Roots", + "description": "the dataset versions the period was taken over" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "period", + "rule", + "left_out", + "roots" + ], + "title": "AnchorAnswer" + }, + "AnchorRequest": { + "properties": { + "roots": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/SpecRoot" + }, + { + "$ref": "#/components/schemas/DatasetRoot" + } + ] + }, + "type": "array", + "maxItems": 64, + "minItems": 1, + "title": "Roots" + }, + "populations": { + "items": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "object" + }, + "type": "array", + "minItems": 1, + "title": "Populations" + }, + "latest": { + "type": "boolean", + "title": "Latest", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "roots", + "populations" + ], + "title": "AnchorRequest", + "description": "`POST /api/datasets/analysis/anchor`: the roots and populations a latest period is\ntaken over." + }, + "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" + }, + "enrichment_stamp": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Enrichment Stamp", + "description": "the digest of the code index's party kinds, classes and whole-total markers this file's party cells ({role}_kind, or {role}_party_kind, {role}_party_class and {role}_party_whole) were read under. Present on a file whose frame holds a party role and whose layout writes party cells (a long-layout file, or one whose columns name a party field), when it was rendered under the serving code index. Absent on every other file, including a pinned or older-layout file rendered under an earlier index, whose kinds may be out of date. A caller naming a frame by this file's rendering adds the stamp to the name, so a change to a party's kind names a new frame" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "artifact_digest", + "rendering", + "bytes", + "media_type", + "created_at", + "tier", + "url" + ], + "title": "ArtifactEntryModel" + }, + "Assumption": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "name_corrected", + "declared_default", + "open_role", + "place_scope" + ], + "title": "Kind", + "description": "what the engine filled. 'name_corrected' is an entity the request typed in words that are no listed name or alias of it, such as a misspelling, read as that entity. '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, the place scope or the role a corrected name binds, 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 typed words in quotes and the entity's label for a corrected name ('\"Germny\" read as Germany'), 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), or the entity dcid a corrected name reads (['country/DEU']). An open role and the place scope carry []. A dataset_resubmit echo matches a declared default to its slot, and a corrected name to its role's entity, by these values" + }, + "asked": { + "anyOf": [ + { + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Asked", + "description": "the words the request typed for a corrected name ('Germny'), which `text` quotes; absent on every other kind. A dataset_resubmit echo restates a corrected name with these words, and drops one that carries none" + } + }, + "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." + }, + "BareExportFrame": { + "properties": { + "spec_id": { + "type": "string", + "pattern": "^spec_[0-9a-f]{32}$", + "title": "Spec Id" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id" + ], + "title": "BareExportFrame", + "description": "A dataset named by its id alone, which stands for its newest version\n(`resolve_export_frame`)." + }, + "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. A what/how property the identity leaves out is one no member it serves asserts: an identity over a family with no total carries only the slots the request binds or opens, or its one breakdown, so a member asserting any other is 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." + }, + "entity_refs": { + "items": { + "$ref": "#/components/schemas/EntityRefs" + }, + "type": "array", + "title": "Entity Refs", + "description": "the binding of each entity of `restatement`, one per restatement.entities row, in row order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" + }, + "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, member_unavailable, year_unavailable, modelled_values, group_read_as_members, whole_total_read, whole_total_unpublished, 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": "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" + "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`, or a Presentation refusal of a frame). On\n`operation_failed`, `code` is the failed operation's refusal code, and on a\nframe's refusal the reason the frame does not load. 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, on operation_failed the failed operation's own refusal code, or on a Presentation refusal of a frame the reason the frame does not load", + "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" }, - "types": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Types", - "description": "the node's typeOf values, as the graph holds them" + "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" }, - "description": { + "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": "string" - }, + {}, { "type": "null" } ], - "title": "Description", - "description": "the node's prose in the graph; null when it has none" + "title": "Prior", + "description": "the field's value before the write, for a disclosed scalar" }, - "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" + "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" }, - "gaps": { + "others": { "items": { - "type": "string" + "$ref": "#/components/schemas/StepRef" }, "type": "array", - "title": "Gaps", - "description": "the member path of every value this door cannot know" + "maxItems": 32, + "title": "Others" }, - "built_from": { - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "enum": [ - "code_index", - "origin_catalogue", - "coverage_index", - "membership" - ] + "ranking": { + "items": { + "type": "string", + "pattern": "^[a-z][a-z0-9_]{0,63}$" }, - "type": "object", - "title": "Built From", - "description": "the build of each table the response read" - }, + "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." + }, + "ChoiceOrigin": { + "properties": { "kind": { "type": "string", - "const": "aggregate", + "const": "choice", "title": "Kind", - "default": "aggregate" + "default": "choice" }, - "aggregate": { - "$ref": "#/components/schemas/PartyBlock" + "choice_id": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "title": "Choice Id", + "description": "the ScopeChoice.id the switch was made on" } }, + "additionalProperties": false, "type": "object", "required": [ - "ref", - "label", - "types", - "description", - "links", - "gaps", - "built_from", - "kind", - "aggregate" + "choice_id" ], - "title": "AggregateNode" + "title": "ChoiceOrigin", + "description": "The scope choice an entry was switched on." }, - "AidCounts": { + "CitationModel": { "properties": { - "donors": { - "type": "integer", - "title": "Donors", - "description": "distinct donors: countries and organisations, leaving out the parties that total other donors (DAC countries, the G7)" + "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" }, - "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)" + "source": { + "anyOf": [ + { + "$ref": "#/components/schemas/CitedSourceNode" + }, + { + "type": "null" + } + ] }, - "years": { + "data_commons": { "anyOf": [ { - "$ref": "#/components/schemas/YearRange" + "$ref": "#/components/schemas/CitedDataCommons" }, { "type": "null" } - ], - "description": "the years with aid data; null when none" + ] + }, + "documentation": { + "anyOf": [ + { + "$ref": "#/components/schemas/CitedDocumentation" + }, + { + "type": "null" + } + ] } }, "additionalProperties": false, "type": "object", "required": [ - "donors", - "recipients", - "years" + "ref", + "label" ], - "title": "AidCounts", - "description": "Counts over the coverage index's rows of the declared datasets." + "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." }, - "AmbiguousEntityCandidate": { + "CitedDataCommons": { "properties": { - "ref": { + "id": { "type": "string", - "title": "Ref", - "description": "the candidate's own dcid" + "enum": [ + "dfo", + "base", + "un_system" + ], + "title": "Id" }, "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" + "title": "Label" } }, "additionalProperties": false, "type": "object", "required": [ - "ref", - "label", - "kind" + "id", + "label" ], - "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." + "title": "CitedDataCommons", + "description": "The Data Commons that serves a cited provenance." }, - "AmbiguousEntityGroup": { + "CitedDocumentation": { "properties": { - "text": { - "type": "string", - "title": "Text", - "description": "the ambiguous query wording; equals some restatement.entities[i].text on the same part" + "publisher": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Publisher", + "description": "the publishing organisation" }, - "candidates": { + "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": { - "$ref": "#/components/schemas/AmbiguousEntityCandidate" + "type": "string" }, "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" + "title": "Currencies", + "description": "sorted ISO 4217 codes of the source's currencies" }, - "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" + "transformation_log": { + "items": { + "$ref": "#/components/schemas/TransformationStepModel" + }, + "type": "array", + "title": "Transformation Log" }, - "candidates": { + "version_history": { "items": { - "$ref": "#/components/schemas/AmbiguousSourceCandidate" + "$ref": "#/components/schemas/ReleaseModel" }, "type": "array", - "title": "Candidates", - "description": "the admitted sources this wording names, two or more: provenances first, then datasets and sources" + "title": "Version History", + "description": "the DFO pipeline's releases, newest first" } }, "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." + "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." }, - "AppliedDefaultModel": { + "CitedSourceNode": { "properties": { - "pointer": { + "ref": { "type": "string", - "title": "Pointer", - "description": "a JSON Pointer to the intent field this default fills" + "title": "Ref" }, - "detail": { + "label": { "type": "string", - "title": "Detail", - "description": "what the component chose and how to narrow it, in plain language" + "title": "Label" } }, "additionalProperties": false, "type": "object", "required": [ - "pointer", - "detail" + "ref", + "label" ], - "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." + "title": "CitedSourceNode", + "description": "The Data Commons `Source` node behind a cited provenance. On the UN\nSystem Data Commons it is the agency provenance itself." }, - "ArtifactEntryModel": { + "CodeBlock": { "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" + "code_system": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "the system's graph node, such as `CRSPurposeCodeEnum`" }, - "tier": { + "property": { "type": "string", - "title": "Tier" + "title": "Property", + "description": "the constraint property the code is a value of" }, - "url": { + "code": { "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" + "title": "Code" }, - "enrichment_stamp": { + "parent": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/NodeRef" }, { "type": "null" } ], - "title": "Enrichment Stamp", - "description": "the digest of the code index's party kinds, classes and whole-total markers this file's party cells ({role}_kind, or {role}_party_kind, {role}_party_class and {role}_party_whole) were read under. Present on a file whose frame holds a party role and whose layout writes party cells (a long-layout file, or one whose columns name a party field), when it was rendered under the serving code index. Absent on every other file, including a pinned or older-layout file rendered under an earlier index, whose kinds may be out of date. A caller naming a frame by this file's rendering adds the stamp to the name, so a change to a party's kind names a new frame" + "description": "the code it specialises; null for a root" + }, + "synonyms": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Synonyms" } }, - "additionalProperties": false, "type": "object", "required": [ - "artifact_digest", - "rendering", - "bytes", - "media_type", - "created_at", - "tier", - "url" + "code_system", + "property", + "code", + "parent", + "synonyms" ], - "title": "ArtifactEntryModel" + "title": "GraphCodeBlock", + "description": "A code's detail block." }, - "Assumption": { + "CodeItem": { "properties": { - "kind": { + "ref": { "type": "string", - "enum": [ - "name_corrected", - "declared_default", - "open_role", - "place_scope" - ], - "title": "Kind", - "description": "what the engine filled. 'name_corrected' is an entity the request typed in words that are no listed name or alias of it, such as a misspelling, read as that entity. '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" + "title": "Ref" }, - "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, the place scope or the role a corrected name binds, as on the sentence's own tokens" + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" }, - "text": { + "code": { "type": "string", - "maxLength": 200, - "minLength": 1, - "title": "Text", - "description": "the words the sentence's assumptions clause states for this fill: the typed words in quotes and the entity's label for a corrected name ('\"Germny\" read as Germany'), 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), or the entity dcid a corrected name reads (['country/DEU']). An open role and the place scope carry []. A dataset_resubmit echo matches a declared default to its slot, and a corrected name to its role's entity, by these values" + "title": "Code" }, - "asked": { + "parent": { "anyOf": [ { - "type": "string", - "maxLength": 200, - "minLength": 1 + "type": "string" }, { "type": "null" } ], - "title": "Asked", - "description": "the words the request typed for a corrected name ('Germny'), which `text` quotes; absent on every other kind. A dataset_resubmit echo restates a corrected name with these words, and drops one that carries none" + "title": "Parent", + "description": "the parent code's dcid; null for a top-level code" } }, - "additionalProperties": false, "type": "object", "required": [ - "kind", - "binding_ref", - "text" + "ref", + "label", + "code", + "parent" ], - "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.\"" + "title": "GraphCodeItem", + "description": "A code in a `codes` or `children` list, with its code and its parent's dcid." }, - "Authority": { + "CodeMappingEntry": { "properties": { - "name": { + "endpoint": { "type": "string", - "title": "Name" + "title": "Endpoint" }, - "version": { + "channel": { "type": "string", - "title": "Version" + "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": [ - "name", - "version" + "endpoint", + "channel", + "doors", + "http_status" ], - "title": "GraphMembershipAuthority", - "description": "Where a membership's rows come from, with the data version that reproduces them." + "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." }, - "Availability": { + "CodeNode": { "properties": { - "scope": { + "ref": { "type": "string", - "const": "dfo", - "title": "Scope", - "default": "dfo" + "title": "Ref", + "description": "the node's dcid" }, - "summary": { - "$ref": "#/components/schemas/AvailabilitySummary" + "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" }, - "default": { + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { "anyOf": [ { - "$ref": "#/components/schemas/AvailabilityDefault" + "type": "string" }, { "type": "null" } ], - "description": "null when no facet dispatches a request naming nothing" + "title": "Description", + "description": "the node's prose in the graph; null when it has none" }, - "sources": { + "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": { - "$ref": "#/components/schemas/SourceAvailability" + "type": "string" }, "type": "array", - "title": "Sources" + "title": "Gaps", + "description": "the member path of every value this door cannot know" }, - "more_sources": { - "type": "integer", - "title": "More Sources", - "description": "the sources past the first ten" + "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": [ - "scope", - "summary", - "default", - "sources", - "more_sources" + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "code" ], - "title": "GraphAvailability", - "description": "Where DFO holds observations of a variable. `sources: []` means it verifiably holds\nnone." + "title": "CodeNode" }, - "AvailabilityDefault": { + "CodeRegistryEntry": { "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" - } - ] + "code": { + "type": "string", + "title": "Code" }, - "measurement_method": { + "classification": { "anyOf": [ { - "$ref": "#/components/schemas/NodeRef" + "type": "string", + "enum": [ + "refusal", + "warning" + ] }, { "type": "null" } - ] + ], + "title": "Classification" }, - "observation_period": { + "definition": { "anyOf": [ { "type": "string" @@ -3737,20 +6797,31 @@ "type": "null" } ], - "title": "Observation Period" + "title": "Definition" }, - "first_year": { + "lifecycle": { "anyOf": [ { - "type": "string" + "type": "string", + "enum": [ + "active", + "retired" + ] }, { "type": "null" } ], - "title": "First Year" + "title": "Lifecycle" }, - "last_year": { + "mappings": { + "items": { + "$ref": "#/components/schemas/CodeMappingEntry" + }, + "type": "array", + "title": "Mappings" + }, + "title": { "anyOf": [ { "type": "string" @@ -3759,106 +6830,109 @@ "type": "null" } ], - "title": "Last Year" + "title": "Title" }, - "places": { + "detail": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "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" + "title": "Detail" } }, "type": "object", "required": [ - "facets", - "source", - "unit", - "measurement_method", - "observation_period", - "first_year", - "last_year", - "places", - "without_data" + "code", + "classification", + "definition", + "lifecycle", + "mappings", + "title", + "detail" ], - "title": "GraphAvailabilityDefault", - "description": "What a data request naming no place, years or facet receives." + "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." }, - "AvailabilitySource": { + "CodeSystemBlock": { "properties": { - "ref": { + "property": { "type": "string", - "title": "Ref" - }, - "label": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Label" + "title": "Property", + "description": "the constraint property the system governs" }, - "documentation": { + "plain_name": { "type": "string", - "title": "Documentation", - "description": "the path of the provenance's source document" + "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": [ - "ref", - "label", - "documentation" + "property", + "plain_name", + "declarations", + "code_count" ], - "title": "GraphAvailabilitySource", - "description": "A source that holds the variable: its provenance, labelled with the catalogue's name." + "title": "GraphCodeSystemBlock", + "description": "A code system's detail block." }, - "AvailabilitySummary": { + "CodeSystemDeclarations": { "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)" + "hierarchical": { + "type": "boolean", + "title": "Hierarchical", + "description": "whether its codes nest through specializationOf" }, - "entities": { - "anyOf": [ - { - "additionalProperties": { - "$ref": "#/components/schemas/EntityCounts" - }, - "type": "object" - }, - { - "type": "null" - } + "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": "Entities", - "description": "the entities covered per graph role; null for any other variable" + "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" }, - "first_year": { + "label": { "anyOf": [ { "type": "string" @@ -3867,9 +6941,18 @@ "type": "null" } ], - "title": "First Year" + "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" }, - "last_year": { + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { "anyOf": [ { "type": "string" @@ -3878,165 +6961,195 @@ "type": "null" } ], - "title": "Last Year" + "title": "Description", + "description": "the node's prose in the graph; null when it has none" }, - "sources": { - "type": "integer", - "title": "Sources" + "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" }, - "facets": { - "type": "integer", - "title": "Facets" + "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": [ - "places", - "entities", - "first_year", - "last_year", - "sources", - "facets" + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "code_system" ], - "title": "GraphAvailabilitySummary", - "description": "The variable across every source." + "title": "CodeSystemNode" }, - "BaseIdentity": { + "ColumnOptionModel": { "properties": { - "identity_version": { + "name": { "type": "string", - "const": "spec1", - "title": "Identity Version", - "description": "the identity domain separator this Spec was hashed under", - "default": "spec1" + "title": "Name" }, - "shape": { - "oneOf": [ + "kind": { + "type": "string", + "title": "Kind" + }, + "droppable": { + "type": "boolean", + "title": "Droppable" + }, + "distinct": { + "anyOf": [ { - "$ref": "#/components/schemas/IdentityShapeSchema" + "type": "integer" }, { - "$ref": "#/components/schemas/IdentityShapePin" + "type": "null" } ], - "title": "Shape", - "description": "the shape this Spec was hashed under", - "discriminator": { - "propertyName": "kind", - "mapping": { - "stat_var": "#/components/schemas/IdentityShapePin", - "statvar_schema": "#/components/schemas/IdentityShapeSchema" - } - } + "title": "Distinct" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "name", + "kind", + "droppable" + ], + "title": "ColumnOptionModel", + "description": "One frame column, verbatim from `materialise.profile.ColumnProfile`." + }, + "CompiledScope": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id", + "description": "the spec_id of `identity`" }, - "slots": { + "identity": { + "$ref": "#/components/schemas/BaseIdentity", + "description": "the compiled identity" + }, + "components": { "items": { - "$ref": "#/components/schemas/IdentitySlot" + "$ref": "#/components/schemas/Component" }, "type": "array", - "maxItems": 64, - "title": "Slots", - "description": "the what/how slots that feed identity -- where/when/source are excluded. A what/how property the identity leaves out is one no member it serves asserts: an identity over a family with no total carries only the slots the request binds or opens, or its one breakdown, so a member asserting any other is 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" - } + "minItems": 1, + "title": "Components", + "description": "one for a plain Spec, one per series of a composite" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "identity", + "components" + ], + "title": "CompiledScope", + "description": "The identity the active options compile to." + }, + "Component": { + "properties": { + "role": { + "type": "string", + "enum": [ + "whole", + "bilateral", + "imputed", + "headline_net", + "headline_ge" ], - "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" - } - } + "title": "Role", + "description": "what the component holds" }, - "facets": { + "periods": { "anyOf": [ { - "additionalProperties": { - "oneOf": [ - { - "$ref": "#/components/schemas/IdentityBindingValue" - }, - { - "$ref": "#/components/schemas/IdentityBindingSet" - }, + "items": { + "prefixItems": [ { - "$ref": "#/components/schemas/IdentityFacetValueRequest" + "type": "integer" }, { - "$ref": "#/components/schemas/IdentityFacetValueAbsent" + "type": "integer" } - ] + ], + "type": "array", + "maxItems": 2, + "minItems": 2 }, - "type": "object" + "type": "array" }, { "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" + "title": "Periods", + "description": "the years the component serves; None for every year" }, - "open_roles": { + "provenance": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/RoleAxis" - }, - "type": "array" + "type": "string" }, { "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" + ], + "title": "Provenance", + "description": "the component's provenance dcid; None when unbound" }, - "measurementMethod": { + "content_version": { "anyOf": [ { "type": "string" @@ -4045,197 +7158,247 @@ "type": "null" } ], - "title": "Measurementmethod" + "title": "Content Version", + "description": "the content version of the component's frame; None until it is minted" }, - "unit": { + "stat_vars": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Unit" + "title": "Stat Vars", + "description": "how many StatVars a mint of the component serves, whose rows the composite sums with the other components'; None for a plain Spec, or where the code index does not settle the component's members" + }, + "identity": { + "$ref": "#/components/schemas/BaseIdentity", + "description": "the component's own identity" } }, + "additionalProperties": false, "type": "object", "required": [ - "provenance", - "measurementMethod", - "unit" + "role", + "identity" ], - "title": "GraphAvailabilityBinding", - "description": "The `scope.facets` values that request a series from Datasets, in its leading unit." + "title": "Component", + "description": "One series the compiled identity is served from." }, - "BindingSet": { + "ComponentBody": { "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)" + "intent": { + "additionalProperties": true, + "type": "object", + "title": "Intent" }, - "set_ref": { + "composition_id": { "anyOf": [ { - "$ref": "#/components/schemas/GraphRef" + "type": "string" }, { "type": "null" } ], - "description": "the group the set was drawn from, when one exists" + "title": "Composition Id" } }, "additionalProperties": false, "type": "object", "required": [ - "values" + "intent" ], - "title": "BindingSet", - "description": "A slot bound to two or more taxonomy members, all in scope." + "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." }, - "BindingUnbound": { + "ComponentReadResponse": { "properties": { - "kind": { + "component_id": { "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": { + "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", - "const": "value", - "title": "Kind", - "description": "binding kind discriminator", - "default": "value" + "title": "Catalog Version", + "description": "the catalogue release this revision minted under" }, - "value": { - "$ref": "#/components/schemas/SlotValue", - "description": "exactly one taxonomy member" + "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." + }, + "retention": { + "anyOf": [ + { + "$ref": "#/components/schemas/RetentionModel" + }, + { + "type": "null" + } + ], + "description": "how long the frame this reply draws can still be fetched, counted from when DFO stored it. It is the stored frame on a read and the named frame on a render. A card's frame stays in the 30-day working tier until a share first includes the card. Once `held_until` has passed the frame can refuse `frame_unavailable`. Fetch the card's data with latest=True to draw from current data. Null for a card that draws no frame, or one whose frame DFO holds no version record of" } }, "additionalProperties": false, "type": "object", "required": [ - "value" + "component_id", + "revision", + "catalog_version", + "composition_id", + "composition_revision", + "stored_intent", + "fact_summary", + "resolved_payload" ], - "title": "BindingValue", - "description": "A slot bound to exactly one taxonomy member." + "title": "ComponentReadResponse", + "description": "`GET /api/presentation/components/{component_id}`'s 200 body." }, - "BreadthDim": { + "ComposedUnit": { "properties": { - "label": { - "type": "string", - "title": "Label", - "description": "the dimension, e.g. providers, years, methods, sources" + "numerator": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleUnit" + }, + { + "$ref": "#/components/schemas/VariableSide" + } + ], + "title": "Numerator" }, - "count": { - "type": "integer", - "title": "Count", - "description": "e.g. 36, 22, 3" + "denominator": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleUnit" + }, + { + "$ref": "#/components/schemas/VariableSide" + } + ], + "title": "Denominator" } }, "additionalProperties": false, "type": "object", "required": [ - "label", - "count" + "numerator", + "denominator" ], - "title": "BreadthDim", - "description": "One breadth dimension with its cardinality." + "title": "ComposedUnit", + "description": "A quotient's unit: the numerator's unit per the denominator's. Either side may be a\nvariable." }, - "BundleOptionModel": { + "ComposedUnitModel": { "properties": { - "state": { - "type": "string", - "title": "State" + "numerator": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/ConvertedUnitModel" + }, + { + "$ref": "#/components/schemas/CountedStatVarModel" + } + ], + "title": "Numerator", + "description": "the unit of the measure divided" }, - "reason": { + "denominator": { "anyOf": [ { "type": "string" }, { - "type": "null" + "$ref": "#/components/schemas/ConvertedUnitModel" + }, + { + "$ref": "#/components/schemas/CountedStatVarModel" } ], - "title": "Reason" + "title": "Denominator", + "description": "the unit of the measure divided by" } }, "additionalProperties": false, "type": "object", "required": [ - "state" + "numerator", + "denominator" ], - "title": "BundleOptionModel" + "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." }, - "CandidateSet": { + "Constraint": { "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" + "property": { + "$ref": "#/components/schemas/NodeRef" + }, + "value": { + "$ref": "#/components/schemas/NodeRef" } }, - "additionalProperties": false, "type": "object", "required": [ - "ordering", - "max_candidates", - "specs", - "truncated" + "property", + "value" ], - "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." + "title": "GraphDefinitionConstraint", + "description": "One constraint: the property and the value the variable fixes it at." }, - "CandidatesPart": { + "ContinentNode": { "properties": { - "variable_text": { + "ref": { + "type": "string", + "title": "Ref", + "description": "the node's dcid" + }, + "label": { "anyOf": [ { "type": "string" @@ -4244,35 +7407,104 @@ "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 + "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" }, - "warnings": { + "types": { "items": { - "$ref": "#/components/schemas/Warning" + "type": "string" }, "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." + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" }, - "timing_ms": { + "description": { "anyOf": [ { - "$ref": "#/components/schemas/Timing" + "type": "string" }, { "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." + "title": "Description", + "description": "the node's prose in the graph; null when it has none" }, - "rendered_sentence": { + "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" @@ -4281,648 +7513,788 @@ "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." + "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" }, - "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." + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" }, - "restatement": { + "description": { "anyOf": [ { - "$ref": "#/components/schemas/ParsedPart" + "type": "string" }, { "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." - }, - "entity_refs": { - "items": { - "$ref": "#/components/schemas/EntityRefs" - }, - "type": "array", - "title": "Entity Refs", - "description": "the binding of each entity of `restatement`, one per restatement.entities row, in row order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" + "title": "Description", + "description": "the node's prose in the graph; null when it has none" }, - "operations": { - "items": { - "$ref": "#/components/schemas/Operation" + "links": { + "additionalProperties": { + "type": "string" }, - "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" + "propertyNames": { + "enum": [ + "codes", + "children", + "members", + "countries", + "datasets", + "variables", + "facets" + ] }, - "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, whole_total_read, whole_total_unpublished, 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" + "type": "object", + "title": "Links", + "description": "each list relation the node has, mapped to its route; empty when none" }, - "assumptions": { + "gaps": { "items": { - "$ref": "#/components/schemas/Assumption" + "type": "string" }, "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" + "title": "Gaps", + "description": "the member path of every value this door cannot know" }, - "reading_assumptions": { + "built_from": { "additionalProperties": { - "items": { - "$ref": "#/components/schemas/Assumption" - }, - "type": "array" + "type": "string" + }, + "propertyNames": { + "enum": [ + "code_index", + "origin_catalogue", + "coverage_index", + "membership" + ] }, "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" + "title": "Built From", + "description": "the build of each table the response read" }, - "spec_id": { + "kind": { "type": "string", - "title": "Spec Id", - "description": "the caller-supplied spec_id this definition must hash to" + "const": "continental_union", + "title": "Kind", + "default": "continental_union" }, - "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" + "continental_union": { + "$ref": "#/components/schemas/PlaceBlock" } }, - "additionalProperties": false, "type": "object", "required": [ - "schema_version", - "spec_id", - "identity" + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "continental_union" ], - "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." + "title": "ContinentalUnionNode" }, - "CapabilitiesResponse": { + "ConversionCurrency": { "properties": { - "capability_version": { + "code": { "type": "string", - "title": "Capability Version", - "description": "a content hash over every capability-bearing field of the release this deployment serves" + "title": "Code", + "description": "the ISO 4217 code a unit request names the currency by" }, - "catalog_version": { + "noun": { "type": "string", - "title": "Catalog Version", - "description": "the catalogue release this deployment serves" + "title": "Noun", + "description": "the plural English noun the sentence's unit token names the currency by ('euros', 'Guatemalan quetzales')" }, - "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" + "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" }, - "live": { - "type": "boolean", - "title": "Live", - "description": "whether this deployment honours the declared default" + "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" }, - "default": { + "base_year_min": { "anyOf": [ { - "type": "boolean" + "type": "integer" }, { "type": "null" } ], - "title": "Default", - "description": "the current default value, when this policy is a boolean toggle" + "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": [ - "name", - "live" + "code", + "noun", + "current_years", + "constant_years", + "base_year_min", + "base_year_max" ], - "title": "CapabilityDefaultPolicy", - "description": "One declared default policy: whether it is live, and its current\ndefault value when it is a simple boolean toggle." + "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." }, - "CapabilityFormat": { + "ConvertedUnitModel": { "properties": { - "name": { + "currency": { "type": "string", - "title": "Name", - "description": "csv, xlsx, or parquet" + "title": "Currency", + "description": "the ISO 4217 code of the currency the values are in" }, - "live": { - "type": "boolean", - "title": "Live", - "description": "whether this deployment can render this format" + "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": [ - "name", - "live" + "currency", + "prices" ], - "title": "CapabilityFormat", - "description": "One output rendering's liveness in this deployment." + "title": "ConvertedUnitModel", + "description": "A converted unit, as the frame's `unit` cell states it." }, - "CapabilityKind": { + "CountedEntityYearsModel": { "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "spec_id or statvar_set" + "count": { + "type": "integer", + "title": "Count", + "description": "how many entities there are" }, - "live": { - "type": "boolean", - "title": "Live", - "description": "whether this deployment's mint door dispatches this kind" + "entities": { + "items": { + "$ref": "#/components/schemas/EntityYearsModel" + }, + "type": "array", + "title": "Entities", + "description": "the first ten of them, sorted" } }, + "additionalProperties": false, "type": "object", "required": [ - "name", - "live" + "count", + "entities" ], - "title": "CapabilityKind", - "description": "One mint-request `kind`'s liveness in this deployment." + "title": "CountedEntityYearsModel", + "description": "The entities a conversion left rows out of, each with its years: how many, and the\nfirst ten, sorted (`materialise.codes.CountedEntityYears`). The message states the count\nand names none, so a reader labels the refs." }, - "CatalogueAnswer": { + "CountedRefsModel": { "properties": { - "schema_version": { + "count": { "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" + "title": "Count", + "description": "how many there are" }, - "scope": { - "$ref": "#/components/schemas/Scope-Output", - "description": "the place the question named, when it named a country" + "refs": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Refs", + "description": "the `dcid:` refs of the first five of them, ten for omitted_entities, in the order the field's warning states" } }, "additionalProperties": false, "type": "object", "required": [ - "query_echo", - "diagnostics", - "scope", - "kind" + "count", + "refs" ], - "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." + "title": "CountedRefsModel", + "description": "The things of one kind a warning counts: how many, and the `dcid:` refs of the first\nfive of them (the first ten for a conversion's left-out `omitted_entities`;\n`materialise.codes.CountedRefs`). A message states the count and may name none, so a\nreader labels the refs. A group's members come in request order and entities sorted;\nfor `withheld_by_registry`, `unserved_entities` come in the order the request names them\nand `withheld_provenances` in the order they first occur across those places; for\n`un_system_unavailable`, `unserved_entities` come in the order the UN reads recorded them." }, - "CatalogueExampleSentence": { + "CountedStatVarModel": { "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" + "description": "the StatVar's `dcid:`-prefixed ref, as the frame holds it" }, - "place": { + "label": { "type": "string", - "title": "Place", - "description": "the country dcid the sentence is filled with" + "title": "Label", + "description": "the StatVar's graph name, or its ref without `dcid:` when the graph has none" } }, "additionalProperties": false, "type": "object", "required": [ - "text", - "template", "stat_var", - "place" + "label" ], - "title": "CatalogueExampleSentence", - "description": "An example sentence a client offers and runs as a query." + "title": "CountedStatVarModel", + "description": "One side of a composed unit whose measure declares no unit, named by its StatVar." }, - "CatalogueResponse": { + "CountryNode": { "properties": { - "catalogue_version": { + "ref": { "type": "string", - "title": "Catalogue Version", - "description": "the published build this body comes from" + "title": "Ref", + "description": "the node's dcid" }, - "counts": { + "label": { "anyOf": [ { - "$ref": "#/components/schemas/Counts" + "type": "string" }, { - "$ref": "#/components/schemas/PlaceCounts" + "type": "null" } ], - "title": "Counts", - "description": "global counts, or the counts at the requested place" + "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" }, - "examples": { + "types": { "items": { - "$ref": "#/components/schemas/CatalogueExampleSentence" + "type": "string" }, "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" + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" }, - "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", + "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" }, - "maxItems": 10, - "title": "Entities", - "type": "array" + "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" }, - "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" - ], + "const": "country", "title": "Kind", - "description": "the Keep a Changelog group the change sits under" + "default": "country" }, - "note": { - "type": "string", - "title": "Note", - "description": "the change, as CommonMark" + "country": { + "$ref": "#/components/schemas/PlaceBlock" } }, "type": "object", "required": [ + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", "kind", - "note" + "country" ], - "title": "ChangeEntry", - "description": "One change in a release." + "title": "CountryNode" }, - "ChangeModel": { + "Counts": { "properties": { - "kind": { - "type": "string", - "title": "Kind", - "description": "the Keep a Changelog group, lowercase: added, changed, deprecated, removed, fixed or security" + "indicators": { + "type": "integer", + "title": "Indicators", + "description": "distinct StatVars search can serve: base, DFO and coverage variables" }, - "note": { - "type": "string", - "title": "Note", - "description": "the change, as CommonMark" + "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": [ - "kind", - "note" + "indicators", + "datasets", + "publishers", + "countries", + "aid" ], - "title": "ChangeModel", - "description": "One change in a release of a source's DFO pipeline." + "title": "Counts", + "description": "What DFO holds, counted from one origin catalogue build and one\ncoverage index build." }, - "ChangedFieldModel": { + "CoverageBare": { "properties": { - "field": { + "kind": { "type": "string", - "title": "Field", - "description": "the intent field this entry reports" + "const": "bare", + "title": "Kind", + "description": "coverage kind discriminator", + "default": "bare" }, - "prior": { - "anyOf": [ - {}, - { - "type": "null" - } - ], - "title": "Prior", - "description": "the field's value before the write, for a disclosed scalar" + "has_data": { + "type": "boolean", + "title": "Has Data", + "description": "whether the region has any observations" }, - "new": { + "window": { "anyOf": [ - {}, + { + "$ref": "#/components/schemas/TimeWindow" + }, { "type": "null" } ], - "title": "New", - "description": "the field's value after the write, for a disclosed scalar" + "description": "the date window, when known" } }, "additionalProperties": false, "type": "object", "required": [ - "field" + "has_data" ], - "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." + "title": "CoverageBare", + "description": "Observation footprint with no count or dimensions; an honest could-not-count." }, - "Choice": { + "CoverageBreadth": { "properties": { - "chosen": { - "$ref": "#/components/schemas/StepRef" + "kind": { + "type": "string", + "const": "breadth", + "title": "Kind", + "description": "coverage kind discriminator", + "default": "breadth" }, - "others": { - "items": { - "$ref": "#/components/schemas/StepRef" - }, - "type": "array", - "maxItems": 32, - "title": "Others" + "has_data": { + "type": "boolean", + "title": "Has Data", + "description": "whether the region has any observations" }, - "ranking": { + "dimensions": { "items": { - "type": "string", - "pattern": "^[a-z][a-z0-9_]{0,63}$" + "$ref": "#/components/schemas/BreadthDim" }, "type": "array", - "maxItems": 8, "minItems": 1, - "title": "Ranking" + "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": [ - "chosen", - "others", - "ranking" + "has_data", + "dimensions" ], - "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." + "title": "CoverageBreadth", + "description": "Observation footprint expressed as structured breadth dimensions." }, - "CitationModel": { + "CoverageDimension": { "properties": { - "text": { + "label": { "type": "string", - "title": "Text" + "title": "Label" }, - "sources": { - "items": { - "$ref": "#/components/schemas/CitationSource" - }, - "type": "array", - "title": "Sources" + "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": [ - "text", - "sources" + "label", + "count" ], - "title": "CitationModel" + "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." }, - "CitationSource": { + "CoverageExact": { "properties": { - "ref": { + "kind": { "type": "string", - "title": "Ref" + "const": "exact", + "title": "Kind", + "description": "coverage kind discriminator", + "default": "exact" }, - "label": { + "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", - "title": "Label" + "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" }, - "processing_level": { + "dimensions": { "anyOf": [ { - "type": "string" + "items": { + "$ref": "#/components/schemas/BreadthDim" + }, + "type": "array" }, { "type": "null" } ], - "title": "Processing Level" + "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" }, - "license": { + "window": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/TimeWindow" }, { "type": "null" } ], - "title": "License" + "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" }, - "license_type": { + "dimensions": { + "items": { + "$ref": "#/components/schemas/CoverageDimension" + }, + "type": "array", + "title": "Dimensions" + }, + "window": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "License Type" + "title": "Window" }, - "license_url": { + "recent_years": { "anyOf": [ { - "type": "string" + "items": { + "$ref": "#/components/schemas/YearCoverage" + }, + "type": "array" }, { "type": "null" } ], - "title": "License Url" + "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" }, - "url": { + "elected_year": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Url" + "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" }, - "source": { + "fullest_year": { "anyOf": [ { - "$ref": "#/components/schemas/CitedSourceNode" + "$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" }, - "data_commons": { + "composition_id": { "anyOf": [ { - "$ref": "#/components/schemas/CitedDataCommons" + "type": "string" }, { "type": "null" } - ] + ], + "title": "Composition Id" }, - "documentation": { + "write_token": { "anyOf": [ { - "$ref": "#/components/schemas/CitedDocumentation" + "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": [ - "ref", - "label" + "intent" ], - "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." + "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`." }, - "CitedDataCommons": { + "CreateReplyResponse": { "properties": { - "id": { + "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", - "enum": [ - "dfo", - "base", - "un_system" - ], - "title": "Id" + "title": "Affordance", + "description": "this door's own line naming the revise and read routes for this component" }, - "label": { + "write_token": { "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": { + "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" @@ -4931,34 +8303,85 @@ "type": "null" } ], - "title": "Publisher", - "description": "the publishing organisation" + "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." }, - "description": { + "retention": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/RetentionModel" }, { "type": "null" } ], - "title": "Description", - "description": "what the source holds" + "description": "how long the frame the new card draws can still be fetched, as a read states it. The frame is held for 30 days from when DFO stored it, until a share first includes the card. Null for a card that draws no frame, or one whose frame DFO holds no version record of" + } + }, + "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." + }, + "CreateShareBody": { + "properties": { + "cards": { + "items": { + "$ref": "#/components/schemas/ShareCardBody" + }, + "type": "array", + "maxItems": 24, + "title": "Cards", + "description": "the cards in slot order. Two entries may name the same revision. A card share takes at least one, a canvas any number, a search or conversation share none" }, - "source_data_url": { + "latest": { + "type": "boolean", + "title": "Latest", + "description": "true for a live share that follows new data and takes replacements, false for a snapshot that keeps the versions its cards draw now, for good" + }, + "title": { "anyOf": [ { - "type": "string" + "type": "string", + "maxLength": 300, + "minLength": 1 }, { "type": "null" } ], - "title": "Source Data Url", - "description": "where the raw data downloads from" + "title": "Title", + "description": "the share's title" }, - "attribution": { + "kind": { + "type": "string", + "enum": [ + "card", + "canvas", + "search", + "conversation" + ], + "title": "Kind", + "description": "what the share publishes. The website renders a canvas, search or conversation share from its payload. A conversation share is a snapshot", + "default": "card" + }, + "payload": { + "$ref": "#/components/schemas/JsonValue", + "description": "website-owned JSON stored with the share as given and read back on GET, at most 10485760 bytes as compact UTF-8" + }, + "write_token": { "anyOf": [ { "type": "string" @@ -4967,10 +8390,21 @@ "type": "null" } ], - "title": "Attribution", - "description": "the citation text the publisher asks for, verbatim" - }, - "update_cadence": { + "title": "Write Token", + "description": "a shw_ token this client minted for the new share: \"shw_\" + secrets.token_urlsafe(16) or an equivalent CSPRNG, 22 url-safe base64 characters after the prefix. It becomes the share's write token and keys the create. A retry with the same write_token and body answers the first share, spending no allowance, and a different body with it is refused as request_invalid. Mint a new one for each create." + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "latest" + ], + "title": "CreateShareBody", + "description": "A create's body. `latest` has no default, because a live link and a fixed one answer\ndifferent questions under a public URL." + }, + "DataBuilds": { + "properties": { + "graph_generation": { "anyOf": [ { "type": "string" @@ -4979,10 +8413,10 @@ "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" + "title": "Graph Generation", + "description": "the graph generation token: the graph service's Cloud Run revisions last read, joined with +; null while unknown" }, - "last_update": { + "origin_catalogue": { "anyOf": [ { "type": "string" @@ -4991,10 +8425,10 @@ "type": "null" } ], - "title": "Last Update", - "description": "the date of the DFO's last refresh of the source" + "title": "Origin Catalogue", + "description": "build id of the origin catalogue this request is bound to" }, - "years_covered": { + "coverage_index": { "anyOf": [ { "type": "string" @@ -5003,10 +8437,10 @@ "type": "null" } ], - "title": "Years Covered", - "description": "YYYY or YYYY-YYYY" + "title": "Coverage Index", + "description": "build id of the series coverage index; null when none is loaded" }, - "granularity": { + "code_index": { "anyOf": [ { "type": "string" @@ -5015,39 +8449,15 @@ "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" + "title": "Code Index", + "description": "content hash of the packaged code index export" } }, - "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." + "title": "GraphDataBuilds", + "description": "The data builds this process serves, each null where it is unknown or absent." }, - "CitedSourceNode": { + "DatasetEntry": { "properties": { "ref": { "type": "string", @@ -5056,76 +8466,27 @@ "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" + "provenances": { + "items": { + "$ref": "#/components/schemas/ProvenanceEntry" + }, + "type": "array", + "title": "Provenances" }, - "parent": { + "description": { "anyOf": [ { - "$ref": "#/components/schemas/NodeRef" + "type": "string" }, { "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" + "title": "Description", + "description": "its sole Provenance's description, as `details.description`; null when it has several" }, - "label": { + "license_type": { "anyOf": [ { "type": "string" @@ -5134,13 +8495,10 @@ "type": "null" } ], - "title": "Label" - }, - "code": { - "type": "string", - "title": "Code" + "title": "License Type", + "description": "licence label every Provenance agrees on, as `license.type`; null when they disagree or one has none" }, - "parent": { + "update_cadence": { "anyOf": [ { "type": "string" @@ -5148,68 +8506,50 @@ { "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" + ], + "title": "Update Cadence", + "description": "release cadence label every Provenance agrees on, as `license.update_cadence`; null when they disagree or one has none" }, - "doors": { + "years_covered": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Doors" + "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" }, - "http_status": { + "source_url": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "title": "Http Status" + "title": "Source Url", + "description": "the publication's page, as `details.source_url`: the Dataset's url, else its sole Provenance's" } }, "type": "object", "required": [ - "endpoint", - "channel", - "doors", - "http_status" + "ref", + "label", + "provenances", + "description", + "license_type", + "update_cadence", + "years_covered", + "source_url" ], - "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." + "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." }, - "CodeNode": { + "DatasetNode": { "properties": { "ref": { "type": "string", @@ -5293,12 +8633,12 @@ }, "kind": { "type": "string", - "const": "code", + "const": "dataset", "title": "Kind", - "default": "code" + "default": "dataset" }, - "code": { - "$ref": "#/components/schemas/CodeBlock" + "dataset": { + "$ref": "#/components/schemas/SourceBlock" } }, "type": "object", @@ -5311,32 +8651,106 @@ "gaps", "built_from", "kind", - "code" + "dataset" ], - "title": "CodeNode" + "title": "DatasetNode" }, - "CodeRegistryEntry": { + "DatasetResubmitInput": { "properties": { - "code": { + "kind": { "type": "string", - "title": "Code" + "const": "dataset_resubmit", + "title": "Kind", + "description": "discriminator for dataset-level re-resolution across every part", + "default": "dataset_resubmit" }, - "classification": { + "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", - "enum": [ - "refusal", - "warning" - ] + "maxLength": 2000, + "minLength": 1 }, { "type": "null" } ], - "title": "Classification" + "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." + }, + "DatasetRoot": { + "properties": { + "spec_id": { + "type": "string", + "pattern": "^spec_[0-9a-f]{32}$", + "title": "Spec Id" }, - "definition": { + "content_version": { + "type": "string", + "pattern": "^cv_[0-9a-f]{32}$", + "title": "Content Version" + }, + "rendering": { + "$ref": "#/components/schemas/RootRendering" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version" + ], + "title": "DatasetRoot", + "description": "A dataset version, as a ref member names it." + }, + "DatasetVersion": { + "properties": { + "content_version": { + "type": "string", + "title": "Content Version" + }, + "base_content_version": { "anyOf": [ { "type": "string" @@ -5345,42 +8759,38 @@ "type": "null" } ], - "title": "Definition" + "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" }, - "lifecycle": { - "anyOf": [ - { - "type": "string", - "enum": [ - "active", - "retired" - ] - }, - { - "type": "null" - } + "rendering": { + "type": "string", + "enum": [ + "plain", + "groupby", + "without_party_totals", + "not_recorded" ], - "title": "Lifecycle" - }, - "mappings": { - "items": { - "$ref": "#/components/schemas/CodeMappingEntry" - }, - "type": "array", - "title": "Mappings" + "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" }, - "title": { + "groupby": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/GroupbyOptions" }, { "type": "null" } ], - "title": "Title" + "description": "the groupby a collapse was summed by, as its file's rendering records it. Null unless `rendering` is groupby" }, - "detail": { + "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 + }, + "enrichment_stamp": { "anyOf": [ { "type": "string" @@ -5389,98 +8799,77 @@ "type": "null" } ], - "title": "Detail" + "title": "Enrichment Stamp", + "description": "the `enrichment_stamp` a file of this version holding party-kind cells, rendered now, carries (`ArtifactEntryModel.enrichment_stamp`): the answering code index's digest, the page's `enrichment_stamp`, when the version's frame holds a party role. Absent when it holds none, since a file of it then holds no party-kind cell and carries no stamp under any code index. A version that stored neither an output profile nor a party-free link lists the digest" } }, + "additionalProperties": false, "type": "object", "required": [ - "code", - "classification", - "definition", - "lifecycle", - "mappings", - "title", - "detail" + "content_version", + "base_content_version", + "rendering", + "groupby" ], - "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." + "title": "DatasetVersion" }, - "CodeSystemBlock": { + "DatasetVersionsPage": { "properties": { - "property": { - "type": "string", - "title": "Property", - "description": "the constraint property the system governs" + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 }, - "plain_name": { + "spec_id": { "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" + "title": "Spec Id" }, - "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)" + "enrichment_stamp": { + "type": "string", + "title": "Enrichment Stamp", + "description": "the digest of the party kinds, classes and whole-total markers the answering code index holds, the one a file rendered now carries (`ArtifactEntryModel.enrichment_stamp`). A frame naming a file that asks for a party-kind column adds it to its name, so a frame named under another stamp does not match" }, - "summable": { - "type": "boolean", - "title": "Summable", - "description": "whether sibling values can rebuild a parent total" + "versions": { + "items": { + "$ref": "#/components/schemas/DatasetVersion" + }, + "type": "array", + "title": "Versions", + "description": "stored versions that are not revoked, newest first" }, - "absent_reading": { - "type": "string", - "enum": [ - "not_declared", - "aggregate" + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } ], - "title": "Absent Reading", - "description": "how a variable that does not declare the property reads" + "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": [ - "hierarchical", - "disjoint_from_children", - "summable", - "absent_reading" + "spec_id", + "enrichment_stamp", + "versions", + "next_cursor", + "complete" ], - "title": "GraphCodeSystemDeclarations", - "description": "The rules a code system declares (`code_index.types.CodeSystemDeclaration`)." + "title": "DatasetVersionsPage" }, - "CodeSystemNode": { + "DateRange": { "properties": { - "ref": { - "type": "string", - "title": "Ref", - "description": "the node's dcid" - }, - "label": { + "start": { "anyOf": [ { "type": "string" @@ -5489,18 +8878,10 @@ "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" + "title": "Start", + "description": "first served date, e.g. '2012'" }, - "description": { + "end": { "anyOf": [ { "type": "string" @@ -5509,120 +8890,105 @@ "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" + "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 }, - "gaps": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Gaps", - "description": "the member path of every value this door cannot know" + "query_echo": { + "$ref": "#/components/schemas/QueryEcho", + "description": "what the response was understood to be answering" }, - "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" + "diagnostics": { + "$ref": "#/components/schemas/Diagnostics", + "description": "run health, warnings, timing, build stamp" }, "kind": { "type": "string", - "const": "code_system", + "const": "declined", "title": "Kind", - "default": "code_system" + "description": "discriminator for a response to a question search does not answer", + "default": "declined" }, - "code_system": { - "$ref": "#/components/schemas/CodeSystemBlock" + "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": [ - "ref", - "label", - "types", - "description", - "links", - "gaps", - "built_from", - "kind", - "code_system" + "query_echo", + "diagnostics", + "reason", + "scope", + "kind" ], - "title": "CodeSystemNode" + "title": "DeclinedAnswer", + "description": "A resolve response to a question search does not answer." }, - "ColumnOptionModel": { + "DefinitePart": { "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "kind": { - "type": "string", - "title": "Kind" + "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." }, - "droppable": { + "separate": { "type": "boolean", - "title": "Droppable" + "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 }, - "distinct": { + "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": [ { - "type": "integer" + "$ref": "#/components/schemas/Timing" }, { "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" + "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." }, - "composition_id": { + "rendered_sentence": { "anyOf": [ { "type": "string" @@ -5630,298 +8996,222 @@ { "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" + ], + "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." }, - "composition_id": { + "sentence_plan": { "anyOf": [ { - "type": "string" + "items": { + "$ref": "#/components/schemas/SentenceToken" + }, + "type": "array" }, { "type": "null" } ], - "title": "Composition Id", - "description": "the composition this component belongs to, null outside one" + "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." }, - "composition_revision": { + "restatement": { "anyOf": [ { - "type": "integer" + "$ref": "#/components/schemas/ParsedPart" }, { "type": "null" } ], - "title": "Composition Revision", - "description": "the composition's current head revision, null outside one" + "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." }, - "stored_intent": { - "additionalProperties": true, - "type": "object", - "title": "Stored Intent", - "description": "this revision's own stored intent, exactly as minted" + "entity_refs": { + "items": { + "$ref": "#/components/schemas/EntityRefs" + }, + "type": "array", + "title": "Entity Refs", + "description": "the binding of each entity of `restatement`, one per restatement.entities row, in row order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" }, - "fact_summary": { - "$ref": "#/components/schemas/FactSummaryModel", - "description": "the closed, token-capped fact summary this revision reports" + "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" }, - "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." + "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, member_unavailable, year_unavailable, modelled_values, group_read_as_members, whole_total_read, whole_total_unpublished, 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": [ - "component_id", - "revision", - "catalog_version", - "composition_id", - "composition_revision", - "stored_intent", - "fact_summary", - "resolved_payload" + "status", + "spec" ], - "title": "ComponentReadResponse", - "description": "`GET /api/presentation/components/{component_id}`'s 200 body." + "title": "DefinitePart", + "description": "One unambiguous answer was resolved for this part." }, - "ComposedUnit": { + "DefinitionMembersRequest": { "properties": { - "numerator": { - "anyOf": [ - { - "$ref": "#/components/schemas/SimpleUnit" - }, - { - "$ref": "#/components/schemas/VariableSide" - } - ], - "title": "Numerator" + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 }, - "denominator": { + "definition": { "anyOf": [ { - "$ref": "#/components/schemas/SimpleUnit" + "$ref": "#/components/schemas/CanonicalDefinition" }, { - "$ref": "#/components/schemas/VariableSide" + "type": "null" } - ], - "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." + "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." }, - "ComposedUnitModel": { + "DefinitionModel": { "properties": { - "numerator": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/ConvertedUnitModel" - }, - { - "$ref": "#/components/schemas/CountedStatVarModel" - } - ], - "title": "Numerator", - "description": "the unit of the measure divided" + "schema_version": { + "type": "integer", + "title": "Schema Version" }, - "denominator": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/ConvertedUnitModel" - }, - { - "$ref": "#/components/schemas/CountedStatVarModel" - } - ], - "title": "Denominator", - "description": "the unit of the measure divided by" + "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": [ - "numerator", - "denominator" + "schema_version", + "spec_id", + "identity" ], - "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." + "title": "DefinitionModel" }, - "Constraint": { + "DefinitionOptionsRequest": { "properties": { - "property": { - "$ref": "#/components/schemas/NodeRef" + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 }, - "value": { - "$ref": "#/components/schemas/NodeRef" + "definition": { + "$ref": "#/components/schemas/CanonicalDefinition" } }, + "additionalProperties": false, "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" + "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 }, - "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" + "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" }, - "kind": { + "text": { "type": "string", - "const": "continent", - "title": "Kind", - "default": "continent" - }, - "continent": { - "$ref": "#/components/schemas/PlaceBlock" + "title": "Text" } }, "type": "object", "required": [ - "ref", - "label", - "types", - "description", - "links", - "gaps", - "built_from", - "kind", - "continent" + "of", + "text" ], - "title": "ContinentNode" + "title": "GraphDefinitionText", + "description": "The graph's prose for one part of a definition." }, - "ContinentalUnionNode": { + "Departure": { "properties": { - "ref": { + "code": { "type": "string", - "title": "Ref", - "description": "the node's dcid" + "enum": [ + "closest_match", + "measure_not_applied", + "operation_not_applied", + "breakdown_not_applied", + "entity_unavailable", + "member_unavailable", + "year_unavailable", + "modelled_values", + "group_read_as_members", + "whole_total_read", + "whole_total_unpublished", + "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. 'member_unavailable': a variable of the answer holds no values under the source, unit and method a reading reads, so it shows none; asked names those variables and shown the source read, and the text names that source and its unit, so each reading of a candidates part states its own; editing the source or the set binding that names the variables clears it. '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. 'whole_total_read': a flow side is read as its whole population, the total its source publishes for every party of that side (official donors (DAC) for 'official donors' or a donor side the request named nothing on or summed over; official and private donors (DAC) for 'all donors'); the text says what the total holds and how to list the side's members: in the question's words ('by donor') on the raw_text door, with open_roles on the others. 'whole_total_unpublished': the request named a whole population ('all donors', 'all recipients') on a side whose dataset publishes no total of it and holds no party outside it, so the side is left unnamed and the answer covers every party the dataset holds there; asked is the request's words, and the text names the dataset. '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.')" }, - "label": { + "binding_ref": { "anyOf": [ { "type": "string" @@ -5930,18 +9220,10 @@ "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" + "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, 'source:' for the source); 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" }, - "description": { + "asked": { "anyOf": [ { "type": "string" @@ -5950,264 +9232,259 @@ "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" + "title": "Asked", + "description": "what the request named, in its own wording; null when it named nothing" }, - "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" + "shown": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Shown", + "description": "what the answer shows instead, as the heading states it; null when nothing" }, - "kind": { + "text": { "type": "string", - "const": "continental_union", - "title": "Kind", - "default": "continental_union" + "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" }, - "continental_union": { - "$ref": "#/components/schemas/PlaceBlock" + "version": { + "type": "string", + "title": "Version", + "description": "the policy id's own version" } }, "type": "object", "required": [ - "ref", - "label", - "types", - "description", - "links", - "gaps", - "built_from", - "kind", - "continental_union" + "policy", + "version" ], - "title": "ContinentalUnionNode" + "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`." }, - "ConversionCurrency": { + "DerivedManifest": { "properties": { - "code": { + "spec_id": { "type": "string", - "title": "Code", - "description": "the ISO 4217 code a unit request names the currency by" + "pattern": "^ops_[0-9a-f]{32}$", + "title": "Spec Id" }, - "noun": { + "content_version": { "type": "string", - "title": "Noun", - "description": "the plural English noun the sentence's unit token names the currency by ('euros', 'Guatemalan quetzales')" + "pattern": "^ocv_[0-9a-f]{32}$", + "title": "Content Version" }, - "current_years": { + "retention": { + "$ref": "#/components/schemas/RetentionModel" + }, + "citation": { + "$ref": "#/components/schemas/CitationModel", + "description": "the sources of every root, each once" + }, + "recipe": { "anyOf": [ { - "$ref": "#/components/schemas/TimeWindow" + "$ref": "#/components/schemas/DerivedRecipe" }, { "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" + "description": "null for a frame stored without a recipe" }, - "constant_years": { - "anyOf": [ - { - "$ref": "#/components/schemas/TimeWindow" + "roots": { + "items": { + "$ref": "#/components/schemas/DerivedManifestRoot" + }, + "type": "array", + "title": "Roots", + "description": "each root dataset version once, in order" + }, + "resolved_periods": { + "items": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" }, - { - "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" + "type": "object" + }, + "type": "array", + "title": "Resolved Periods", + "description": "each period the recipe states relative to the latest, with its period" }, - "base_year_min": { + "anchor": { "anyOf": [ { - "type": "integer" + "$ref": "#/components/schemas/RecipeAnchor" }, { "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" + "description": "the latest period of the rolling anchor and the series without a row at it" }, - "base_year_max": { + "left_out": { "anyOf": [ { - "type": "integer" + "items": { + "$ref": "#/components/schemas/RecipeDroppedSeries" + }, + "type": "array" }, { "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" + "title": "Left Out", + "description": "every series a step of the recipe dropped for a data gap, step by step; null for a recipe stored without them" }, - "base_year": { + "left_out_complete": { "anyOf": [ { - "type": "integer" + "type": "boolean" }, { "type": "null" } ], - "title": "Base Year", - "description": "the base year of constant prices, absent for current prices" + "title": "Left Out Complete", + "description": "false when the steps dropped more series than `left_out` lists" } }, "additionalProperties": false, "type": "object", "required": [ - "currency", - "prices" + "spec_id", + "content_version", + "retention", + "citation", + "recipe", + "roots", + "resolved_periods", + "anchor", + "left_out", + "left_out_complete" ], - "title": "ConvertedUnitModel", - "description": "A converted unit, as the frame's `unit` cell states it." + "title": "DerivedManifest", + "description": "What a client builds a derived Dataset from. See the module docstring." }, - "CountedEntityYearsModel": { + "DerivedManifestRoot": { "properties": { - "count": { - "type": "integer", - "title": "Count", - "description": "how many entities there are" + "spec_id": { + "type": "string", + "title": "Spec Id" }, - "entities": { - "items": { - "$ref": "#/components/schemas/EntityYearsModel" + "content_version": { + "type": "string", + "title": "Content Version" + }, + "rendering": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" }, - "type": "array", - "title": "Entities", - "description": "the first ten of them, sorted" + "type": "object", + "title": "Rendering" } }, "additionalProperties": false, "type": "object", "required": [ - "count", - "entities" + "spec_id", + "content_version", + "rendering" ], - "title": "CountedEntityYearsModel", - "description": "The entities a conversion left rows out of, each with its years: how many, and the\nfirst ten, sorted (`materialise.codes.CountedEntityYears`). The message states the count\nand names none, so a reader labels the refs." + "title": "DerivedManifestRoot" }, - "CountedRefsModel": { + "DerivedRecipe": { "properties": { - "count": { - "type": "integer", - "title": "Count", - "description": "how many there are" + "normal_form_hash": { + "type": "string", + "title": "Normal Form Hash" }, - "refs": { + "replay_key": { + "type": "string", + "title": "Replay Key" + }, + "execution_identity": { + "type": "string", + "title": "Execution Identity" + }, + "tree": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "object", + "title": "Tree", + "description": "the recipe's op-spec tree" + }, + "roots": { "items": { - "type": "string" + "$ref": "#/components/schemas/JsonValue" }, "type": "array", - "title": "Refs", - "description": "the `dcid:` refs of the first five of them, ten for omitted_entities: a group's members in request order, entities sorted" + "title": "Roots", + "description": "how the recipe read each root dataset" } }, "additionalProperties": false, "type": "object", "required": [ - "count", - "refs" + "normal_form_hash", + "replay_key", + "execution_identity", + "tree", + "roots" ], - "title": "CountedRefsModel", - "description": "The things of one kind a warning counts: how many, and the `dcid:` refs of the first\nfive, or ten for a conversion's left-out entities (`materialise.codes.CountedRefs`). The message states the count and names none, so a\nreader labels the refs." + "title": "DerivedRecipe" }, - "CountedStatVarModel": { + "DerivedRoot": { "properties": { - "stat_var": { + "spec_id": { "type": "string", - "title": "Stat Var", - "description": "the StatVar's `dcid:`-prefixed ref, as the frame holds it" + "pattern": "^ops_[0-9a-f]{32}$", + "title": "Spec Id" }, - "label": { + "content_version": { "type": "string", - "title": "Label", - "description": "the StatVar's graph name, or its ref without `dcid:` when the graph has none" + "pattern": "^ocv_[0-9a-f]{32}$", + "title": "Content Version" } }, "additionalProperties": false, "type": "object", "required": [ - "stat_var", - "label" + "spec_id", + "content_version" ], - "title": "CountedStatVarModel", - "description": "One side of a composed unit whose measure declares no unit, named by its StatVar." + "title": "DerivedRoot", + "description": "A frame an earlier analysis stored." }, - "CountryNode": { + "DescribedProperty": { "properties": { "ref": { "type": "string", - "title": "Ref", - "description": "the node's dcid" + "title": "Ref" }, "label": { "anyOf": [ @@ -6218,448 +9495,415 @@ "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" + "title": "Label" } }, "additionalProperties": false, "type": "object", "required": [ - "indicators", - "datasets", - "publishers", - "countries", - "aid" + "ref", + "label" ], - "title": "Counts", - "description": "What DFO holds, counted from one origin catalogue build and one\ncoverage index build." + "title": "DescribedProperty", + "description": "The open dimension a values page lists, and its label (`null` where none is known)." }, - "CoverageBare": { + "DescribedValue": { "properties": { - "kind": { + "ref": { "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" + "title": "Ref" }, - "window": { + "label": { "anyOf": [ { - "$ref": "#/components/schemas/TimeWindow" + "type": "string" }, { "type": "null" } ], - "description": "the date window, when known" + "title": "Label" + }, + "variables": { + "type": "integer", + "minimum": 0.0, + "title": "Variables" } }, "additionalProperties": false, "type": "object", "required": [ - "has_data" + "ref", + "label", + "variables" ], - "title": "CoverageBare", - "description": "Observation footprint with no count or dimensions; an honest could-not-count." + "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." }, - "CoverageBreadth": { + "DescriptionValuesPage": { + "$id": "https://schemas.dfo.one.org/datasets/v1/description-values-page.json", "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" + "property": { + "$ref": "#/components/schemas/DescribedProperty" }, - "dimensions": { + "items": { "items": { - "$ref": "#/components/schemas/BreadthDim" + "$ref": "#/components/schemas/DescribedValue" }, "type": "array", - "minItems": 1, - "title": "Dimensions", - "description": "non-empty on breadth; structured dimension counts" + "title": "Items" }, - "window": { + "next_cursor": { "anyOf": [ { - "$ref": "#/components/schemas/TimeWindow" + "type": "string" }, { "type": "null" } ], - "description": "the date window this breadth applies to" + "title": "Next Cursor" + }, + "complete": { + "type": "boolean", + "title": "Complete" } }, "additionalProperties": false, "type": "object", "required": [ - "has_data", - "dimensions" + "property", + "items", + "next_cursor", + "complete" ], - "title": "CoverageBreadth", - "description": "Observation footprint expressed as structured breadth dimensions." + "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." }, - "CoverageDimension": { + "DiagnosticModel": { "properties": { - "label": { + "code": { "type": "string", - "title": "Label" + "title": "Code" }, - "count": { - "type": "integer", - "title": "Count" + "severity": { + "type": "string", + "title": "Severity" }, - "axis": { + "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/RoleAxis" + "$ref": "#/components/schemas/Timing" }, { "type": "null" } - ] + ], + "description": "latency breakdown" }, - "noun": { + "llm_usage": { "anyOf": [ { - "$ref": "#/components/schemas/DimensionNoun" + "additionalProperties": { + "type": "integer" + }, + "type": "object" }, { "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" + "title": "Llm Usage", + "description": "per-request LLM token counts {input_tokens, output_tokens, cached_tokens}, plus {jev_input_tokens, jev_output_tokens} when Jev answered a call, and uncounted_calls, the calls sent whose tokens no response reported" + }, + "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": [ - "label", - "count" + "engine_build", + "trace_id", + "warnings" ], - "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." + "title": "Diagnostics", + "description": "Run health, warnings, timing, and build stamp." }, - "CoverageExact": { + "DimensionNoun": { "properties": { - "kind": { + "singular": { "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" + "title": "Singular" }, - "evidence": { + "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": [ - "facet_metadata", - "observed" + "transformation_log", + "version_history", + "methodology.description", + "data_notes" ], - "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" + "title": "Member", + "description": "the wire path the document fills" }, - "dimensions": { + "line": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/BreadthDim" - }, - "type": "array" + "type": "integer" }, { "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" + "title": "Line", + "description": "1-based line in the decoded document where the problem starts, or null" }, - "window": { - "anyOf": [ - { - "$ref": "#/components/schemas/TimeWindow" - }, - { - "type": "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" ], - "description": "the date window this count applies to" + "title": "Reason", + "description": "the template rule the document breaks" } }, - "additionalProperties": false, "type": "object", "required": [ - "has_data", - "observation_count" + "member", + "line", + "reason" ], - "title": "CoverageExact", - "description": "Observation footprint with an exact count for its resolved window." + "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`." }, - "CoverageModel": { + "DownloadFacts": { "properties": { "rows": { - "type": "integer", - "title": "Rows" - }, - "dimensions": { - "items": { - "$ref": "#/components/schemas/CoverageDimension" - }, - "type": "array", - "title": "Dimensions" - }, - "window": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "integer" }, { "type": "null" } ], - "title": "Window" + "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" }, - "recent_years": { + "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": [ { - "items": { - "$ref": "#/components/schemas/YearCoverage" - }, - "type": "array" + "type": "integer" }, { "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" + "title": "Series", + "description": "the series in the file: distinct (StatVar, entities) with a point, the mint's series_count. Null when rows is null" }, - "elected_year": { + "window": { "anyOf": [ { - "type": "integer" + "$ref": "#/components/schemas/TimeWindow" }, { "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" + "description": "the first and last years of the file's points; null when rows is null" }, - "fullest_year": { + "licence": { "anyOf": [ { - "$ref": "#/components/schemas/YearCoverage" + "$ref": "#/components/schemas/DownloadLicence" }, { "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" + "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", - "dimensions" + "rows_exact" ], - "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." + "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`." }, - "CreateComponentBody": { + "DownloadLicence": { "properties": { - "intent": { - "additionalProperties": true, - "type": "object", - "title": "Intent" + "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." + }, + "DroppedEntry": { + "properties": { + "entry": { + "$ref": "#/components/schemas/Entry", + "description": "the entry left out" }, - "composition_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "code": { + "type": "string", + "enum": [ + "carried_choice_not_applied", + "stated_choice_not_applied" ], - "title": "Composition Id" + "title": "Code", + "description": "carried_choice_not_applied for a carried entry, stated_choice_not_applied for an entry the request's words stated", + "default": "carried_choice_not_applied" }, - "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\"." + "cause": { + "type": "string", + "title": "Cause", + "description": "why the entry cannot apply: entry_on_axis (another entry settles the axis), axis_absent, option_unknown, the option's unavailability reason (a ScopeReasonCode), not_served when the option is available but the answer serves another, or, where compile weighs the entry, option_unavailable, conflicts_with_entry or the conflict that blocks it" } }, "additionalProperties": false, "type": "object", "required": [ - "intent" + "entry", + "cause" ], - "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`." + "title": "DroppedEntry", + "description": "An entry left out because it cannot apply to this part: a carried entry, or on a\nfresh search an entry the request's words stated." }, - "CreateReplyResponse": { + "EnrichmentCoverageCountsModel": { "properties": { - "component_id": { - "type": "string", - "title": "Component Id", - "description": "the newly minted component's own id" + "entities": { + "type": "integer", + "title": "Entities" }, - "revision": { + "covered": { "type": "integer", - "title": "Revision", - "description": "the first revision a create mints, always 1" + "title": "Covered" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "entities", + "covered" + ], + "title": "EnrichmentCoverageCountsModel" + }, + "EnrichmentOptionModel": { + "properties": { + "column": { + "type": "string", + "title": "Column" }, - "catalog_version": { + "field": { "type": "string", - "title": "Catalog Version", - "description": "the catalogue release this revision minted under" + "title": "Field" }, - "composition_id": { + "token": { + "type": "string", + "title": "Token" + }, + "state": { + "type": "string", + "title": "State" + }, + "reason": { "anyOf": [ { "type": "string" @@ -6668,234 +9912,307 @@ "type": "null" } ], - "title": "Composition Id", - "description": "the composition this component belongs to, null outside one" + "title": "Reason" }, - "composition_revision": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Composition Revision", - "description": "the composition's current head revision, null outside one" + "coverage": { + "$ref": "#/components/schemas/EnrichmentCoverageCountsModel" }, - "changed": { + "missing": { "items": { - "$ref": "#/components/schemas/ChangedFieldModel" + "$ref": "#/components/schemas/MissingEntityModel" }, "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" + "title": "Missing" }, - "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." + "truncated": { + "type": "boolean", + "title": "Truncated", + "default": false }, - "affordance": { + "in_long_layout": { + "type": "boolean", + "title": "In Long Layout", + "description": "true when a long-layout download writes this information with no columns token, so naming the token there adds nothing: {role}_label, and the party fields of a role on a flow axis, which its {role}_kind column reads in words. Pivot output and the frame layout write the column only when the token asks for it", + "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." + }, + "EntitiesBinding": { + "properties": { + "kind": { "type": "string", - "title": "Affordance", - "description": "this door's own line naming the revise and read routes for this component" + "const": "entities", + "title": "Kind", + "default": "entities" + }, + "role": { + "$ref": "#/components/schemas/RoleAxis", + "description": "the role the entities join" + }, + "add": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Add", + "description": "the entity dcids the option adds, sorted; [] for the members alone" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "role", + "add" + ], + "title": "EntitiesBinding", + "description": "An option that adds entities to one role of the identity, beside its members." + }, + "EntityCounts": { + "properties": { + "parties": { + "type": "integer", + "title": "Parties", + "description": "entities with figures of their own" + }, + "private": { + "type": "integer", + "title": "Private", + "description": "the parties whose class is private, a subset of parties" + }, + "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", + "private", + "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" }, - "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." + "periods": { + "type": "integer", + "minimum": 0.0, + "title": "Periods" }, - "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." + "of": { + "type": "integer", + "minimum": 0.0, + "title": "Of" } }, "additionalProperties": false, "type": "object", "required": [ - "component_id", - "revision", - "catalog_version", - "composition_id", - "composition_revision", - "changed", - "fact_summary", - "resolved_payload", - "affordance", - "write_token" + "entity", + "periods", + "of" ], - "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." + "title": "EntityCoverage", + "description": "How many of the window's periods one ranked entity holds." }, - "DataBuilds": { + "EntityGroup": { "properties": { - "graph_generation": { + "ref": { "anyOf": [ { - "type": "string" + "type": "string", + "maxLength": 1024 }, { "type": "null" } ], - "title": "Graph Generation", - "description": "the graph generation token: the graph service's Cloud Run revisions last read, joined with +; null while unknown" + "title": "Ref", + "description": "the group's own graph node, when the graph holds one; null otherwise" }, - "origin_catalogue": { + "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" + "type": "string", + "maxLength": 1024 }, { "type": "null" } ], - "title": "Origin Catalogue", - "description": "build id of the origin catalogue this request is bound to" + "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" }, - "coverage_index": { + "total": { "anyOf": [ { - "type": "string" + "type": "string", + "maxLength": 1024 }, { "type": "null" } ], - "title": "Coverage Index", - "description": "build id of the series coverage index; null when none is loaded" + "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" }, - "code_index": { + "group_id": { "anyOf": [ { - "type": "string" + "type": "string", + "maxLength": 1024 }, { "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" + "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" }, - "provenances": { - "items": { - "$ref": "#/components/schemas/ProvenanceEntry" - }, - "type": "array", - "title": "Provenances" + "members": { + "anyOf": [ + { + "items": { + "type": "string", + "maxLength": 1024 + }, + "type": "array", + "maxItems": 1024 + }, + { + "type": "null" + } + ], + "title": "Members", + "description": "for a role that binds the group's published total (total), the group's members as the membership registry lists them, sorted, e.g. the 32 DAC member countries for DAC countries, total; the residuals a regional total counts beside them are not listed. Absent when the role binds the members or the registry lists none for the group. Derived on every answer; a posted value is ignored" }, - "description": { + "whole_of": { "anyOf": [ { - "type": "string" + "items": { + "type": "string", + "enum": [ + "official", + "private", + "residual" + ] + }, + "type": "array" }, { "type": "null" } ], - "title": "Description", - "description": "its sole Provenance's description, as `details.description`; null when it has several" + "title": "Whole Of", + "description": "the classes of party the role's whole population covers, sorted: official, private or residual, e.g. [\"official\"] for Official Donors, Total, which holds every official donor and no private one; absent for any other group" }, - "license_type": { + "holds_multilaterals": { "anyOf": [ { - "type": "string" + "type": "boolean" }, { "type": "null" } ], - "title": "License Type", - "description": "licence label every Provenance agrees on, as `license.type`; null when they disagree or one has none" + "title": "Holds Multilaterals", + "description": "for a donor role that binds a published total (total) or reads as its whole population (whole_of), whether that population holds a multilateral organisation (see ResolvedEntity.multilateral): false for DAC countries, total, whose members are countries, true for Official Donors, Total in DAC2a. Absent for any other group and for a total whose members the registry does not list. Derived on every answer; a posted value is ignored" }, - "update_cadence": { + "side_classes": { "anyOf": [ { - "type": "string" + "items": { + "type": "string", + "enum": [ + "official", + "private", + "residual" + ] + }, + "type": "array" }, { "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" + "title": "Side Classes", + "description": "for a role read as its whole population, the classes of party, totals aside, the answer's dataset publishes on that side, sorted, e.g. [\"official\", \"private\", \"residual\"] for donors in DAC2a; a class here and not in whole_of, such as \"private\", is outside the total. Absent for any other group. Derived from the identity on every answer; a posted value is ignored" }, - "years_covered": { + "left_out": { "anyOf": [ { - "type": "string" + "items": { + "type": "string" + }, + "type": "array", + "maxItems": 64 }, { "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" + "title": "Left Out", + "description": "for a group the role reads as its members, the labels of the residuals the group's published total counts beside the members that the answer leaves out and its dataset publishes on the role's side, in the total's order, e.g. [\"Africa, unallocated by country (DAC)\"] for Africa read as its countries. Absent when the members leave nothing out, for a group the role reads as its total or whole population, and on a role outside a flow. Derived on every answer; a posted value is ignored" }, - "source_url": { + "sum_differs": { "anyOf": [ { - "type": "string" + "type": "boolean" }, { "type": "null" } ], - "title": "Source Url", - "description": "the publication's page, as `details.source_url`: the Dataset's url, else its sole Provenance's" + "title": "Sum Differs", + "description": "for a group the role reads as its members, true when the dataset publishes its own figure for the group's total and that figure is not the members' sum, so it can differ from one built from them. Absent otherwise. Derived on every answer; a posted value is ignored" } }, + "additionalProperties": false, "type": "object", "required": [ - "ref", - "label", - "provenances", - "description", - "license_type", - "update_cadence", - "years_covered", - "source_url" + "label" ], - "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." + "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, and `members` lists the group's members as the\nmembership registry holds them, so a caller can tell whether a party sits inside the\ntotal. A role read as the whole population of\nits side, the source's total of every party there (\"Official Donors, Total\")\nor a union of such totals (\"all donors including private\"), states the\nclasses of party that population covers in `whole_of`, and the classes the answer's\ndataset publishes on that side in `side_classes`; a resubmit derives both from the\nidentity and the code index, whatever it posts. A role read as the group's members states\nthe residuals the group's total counts that the members leave out in `left_out`, and\nwhether the source publishes its own figure for the group in `sum_differs`\n(`spec_build.with_members_left_out`). 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`)." }, - "DatasetNode": { + "EntityOptions": { "properties": { - "ref": { - "type": "string", - "title": "Ref", - "description": "the node's dcid" - }, - "label": { + "entity_ref": { "anyOf": [ { "type": "string" @@ -6904,286 +10221,305 @@ "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" + "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" }, - "types": { + "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": { - "type": "string" + "$ref": "#/components/schemas/SlotOption" }, "type": "array", - "title": "Types", - "description": "the node's typeOf values, as the graph holds them" + "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" }, - "description": { + "label": { + "type": "string", + "title": "Label" + }, + "kind": { "anyOf": [ { - "type": "string" + "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": "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" + "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." + }, + "EntityRefs": { + "properties": { + "text": { + "type": "string", + "title": "Text", + "description": "the entity text, equal to restatement.entities[i].text, where i is this entry's position in Part.entity_refs" }, - "gaps": { + "refs": { "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" + "title": "Refs", + "description": "the refs the part's answer binds for `text`: a place gives its node; a group, continent or subregion bound as itself gives its own node, or the total its dataset publishes for it (G7 bound as GroupOfSeven); one bound as its members gives the set's own ref first (its node, else that total, else its registry id) and then the members, sorted. In a part refused before its places were bound, a text that resolved to one node gives that node, and a group or a set read as its members gives []. [] for an ambiguous text and one that resolved to no node or a node the answer does not bind" } }, + "additionalProperties": false, "type": "object", "required": [ - "ref", - "label", - "types", - "description", - "links", - "gaps", - "built_from", - "kind", - "dataset" + "text", + "refs" ], - "title": "DatasetNode" + "title": "EntityRefs", + "description": "The graph nodes one entity row of a part's restatement binds in the answer." }, - "DatasetResubmitInput": { + "EntityYearsModel": { "properties": { - "kind": { + "ref": { "type": "string", - "const": "dataset_resubmit", - "title": "Kind", - "description": "discriminator for dataset-level re-resolution across every part", - "default": "dataset_resubmit" + "title": "Ref", + "description": "the entity's `dcid:` ref" }, - "entries": { + "years": { "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": "string" }, "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" + "title": "Years", + "description": "the years left out, as runs of consecutive years, `1990-2001` or `2004`" } }, "additionalProperties": false, "type": "object", "required": [ - "entries" + "ref", + "years" ], - "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." + "title": "EntityYearsModel", + "description": "One entity a conversion left rows out of, and the years of those rows\n(`materialise.codes.EntityYears`)." }, - "DatasetVersion": { + "Entry": { "properties": { - "content_version": { + "axis": { "type": "string", - "title": "Content Version" - }, - "base_content_version": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "enum": [ + "sector", + "region", + "measure_basis", + "provider" ], - "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" + "title": "Axis", + "description": "the axis the entry settles" }, - "rendering": { + "option_id": { + "type": "string", + "maxLength": 128, + "pattern": "^(sector|region|measure_basis|provider):[A-Za-z0-9_+]+$", + "title": "Option Id", + "description": "the option asked for; its prefix is `axis`" + }, + "provenance": { "type": "string", "enum": [ - "plain", - "groupby", - "without_party_totals", - "not_recorded" + "explicit", + "carried" ], - "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" + "title": "Provenance", + "description": "explicit: the request's own words or a switch; carried: a choice the conversation settled on an earlier part, attached by axis and concept" }, - "groupby": { + "concept": { "anyOf": [ { - "$ref": "#/components/schemas/GroupbyOptions" + "type": "string", + "maxLength": 64 }, { "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 + "title": "Concept", + "description": "the concept the entry was made for ('health'), so a carried entry attaches only to a part asking for that concept; None when the axis has no concept" }, - "enrichment_stamp": { - "anyOf": [ + "origin": { + "oneOf": [ { - "type": "string" + "$ref": "#/components/schemas/TextOrigin" }, { - "type": "null" + "$ref": "#/components/schemas/ChoiceOrigin" } ], - "title": "Enrichment Stamp", - "description": "the `enrichment_stamp` a file of this version holding party-kind cells, rendered now, carries (`ArtifactEntryModel.enrichment_stamp`): the answering code index's digest, the page's `enrichment_stamp`, when the version's frame holds a party role. Absent when it holds none, since a file of it then holds no party-kind cell and carries no stamp under any code index. A version that stored neither an output profile nor a party-free link lists the digest" + "title": "Origin", + "description": "where the entry was read or switched", + "discriminator": { + "propertyName": "kind", + "mapping": { + "choice": "#/components/schemas/ChoiceOrigin", + "text": "#/components/schemas/TextOrigin" + } + } + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "axis", + "option_id", + "provenance", + "origin" + ], + "title": "Entry", + "description": "One explicit or carried scope entry: an option the user asked for on one axis." + }, + "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": [ - "content_version", - "base_content_version", - "rendering", - "groupby" + "added" ], - "title": "DatasetVersion" + "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." }, - "DatasetVersionsPage": { + "ExportFormat": { + "type": "string", + "enum": [ + "csv", + "xlsx", + "parquet" + ] + }, + "ExportFrame": { "properties": { - "schema_version": { - "type": "integer", - "const": 1, - "title": "Schema Version", - "default": 1 - }, "spec_id": { "type": "string", + "pattern": "^(spec|ops)_[^/]+$", "title": "Spec Id" }, - "enrichment_stamp": { + "content_version": { "type": "string", - "title": "Enrichment Stamp", - "description": "the digest of the party kinds, classes and whole-total markers the answering code index holds, the one a file rendered now carries (`ArtifactEntryModel.enrichment_stamp`). A frame naming a file that asks for a party-kind column adds it to its name, so a frame named under another stamp does not match" - }, - "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" + "minLength": 1, + "title": "Content Version" } }, "additionalProperties": false, "type": "object", "required": [ "spec_id", - "enrichment_stamp", - "versions", - "next_cursor", - "complete" + "content_version" ], - "title": "DatasetVersionsPage" + "title": "ExportFrame", + "description": "One exact frame version: a dataset's `spec_` id or a derived frame's `ops_` id, and its\ncontent version." }, - "DateRange": { + "ExportLicence": { "properties": { - "start": { + "source": { + "type": "string", + "title": "Source", + "description": "the source's ref, the key of the licence deny-list" + }, + "label": { + "type": "string", + "title": "Label" + }, + "licence": { "anyOf": [ { "type": "string" @@ -7192,10 +10528,10 @@ "type": "null" } ], - "title": "Start", - "description": "first served date, e.g. '2012'" + "title": "Licence", + "description": "the licence's label; null where none is declared" }, - "end": { + "url": { "anyOf": [ { "type": "string" @@ -7204,105 +10540,176 @@ "type": "null" } ], - "title": "End", - "description": "last served date, e.g. '2022'" + "title": "Url", + "description": "the licence's terms page; null where none is declared" } }, "additionalProperties": false, "type": "object", - "title": "DateRange", - "description": "The first and last dates of the points an answer serves for a StatVar." + "required": [ + "source", + "label", + "licence", + "url" + ], + "title": "ExportLicence" }, - "DeclinedAnswer": { + "ExportRequestBody": { "properties": { - "schema_version": { + "frame": { + "anyOf": [ + { + "$ref": "#/components/schemas/ExportFrame" + }, + { + "$ref": "#/components/schemas/BareExportFrame" + } + ], + "title": "Frame", + "description": "the frame version to export, or `{spec_id}` alone for a dataset's newest version, which the answer's `frame` names" + }, + "format": { + "$ref": "#/components/schemas/ExportFormat", + "description": "the file format", + "default": "csv" + }, + "bundle": { + "type": "boolean", + "title": "Bundle", + "description": "true for a zip bundle of the file beside its README, datapackage.json and CITATION.cff", + "default": false + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "frame" + ], + "title": "ExportRequestBody", + "description": "`POST /api/datasets/exports`'s body: an `ExportRequest` whose frame may name a dataset id\nalone." + }, + "ExportResponse": { + "properties": { + "export_id": { + "type": "string", + "pattern": "^exp_[0-9a-f]{32}$", + "title": "Export Id" + }, + "url_path": { + "type": "string", + "title": "Url Path", + "description": "the export link's path, relative to the public site's origin. It needs no key and does not expire: each request answers 302 to a URL signed for five minutes" + }, + "file_name": { + "type": "string", + "title": "File Name" + }, + "media_type": { + "type": "string", + "title": "Media Type" + }, + "format": { + "$ref": "#/components/schemas/ExportFormat" + }, + "bundle": { + "type": "boolean", + "title": "Bundle" + }, + "bytes": { "type": "integer", - "const": 1, - "title": "Schema Version", - "description": "contract schema version; exactly 1 for v1. Required on every response.", - "default": 1 + "title": "Bytes" }, - "query_echo": { - "$ref": "#/components/schemas/QueryEcho", - "description": "what the response was understood to be answering" + "rows": { + "type": "integer", + "title": "Rows", + "description": "rows in the file's data table, header excluded" }, - "diagnostics": { - "$ref": "#/components/schemas/Diagnostics", - "description": "run health, warnings, timing, build stamp" + "columns": { + "type": "integer", + "title": "Columns", + "description": "columns in the file's data table" }, - "kind": { + "sha256": { "type": "string", - "const": "declined", - "title": "Kind", - "description": "discriminator for a response to a question search does not answer", - "default": "declined" + "title": "Sha256", + "description": "the hex SHA-256 of the file's bytes" }, - "reason": { + "frame": { + "$ref": "#/components/schemas/ExportFrame" + }, + "citation": { "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" + "title": "Citation" }, - "scope": { - "$ref": "#/components/schemas/Scope-Output", - "description": "the place the question named, when it named a country" + "licences": { + "items": { + "$ref": "#/components/schemas/ExportLicence" + }, + "type": "array", + "title": "Licences", + "description": "each source of the frame once" + }, + "pinned": { + "type": "boolean", + "title": "Pinned", + "description": "true: the file is held in the pinned tier, kept for good" } }, "additionalProperties": false, "type": "object", "required": [ - "query_echo", - "diagnostics", - "reason", - "scope", - "kind" + "export_id", + "url_path", + "file_name", + "media_type", + "format", + "bundle", + "bytes", + "rows", + "columns", + "sha256", + "frame", + "citation", + "licences", + "pinned" ], - "title": "DeclinedAnswer", - "description": "A resolve response to a question search does not answer." + "title": "ExportResponse", + "description": "The facts of a prepared export. A repeat prepare answers the same facts." }, - "DefinitePart": { + "FacetItem": { "properties": { - "variable_text": { + "ref": { + "type": "string", + "title": "Ref" + }, + "label": { + "type": "null", + "title": "Label" + }, + "source": { + "$ref": "#/components/schemas/AvailabilitySource" + }, + "unit": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/NodeRef" }, { "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": { + "measurement_method": { "anyOf": [ { - "$ref": "#/components/schemas/Timing" + "$ref": "#/components/schemas/NodeRef" }, { "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": { + "observation_period": { "anyOf": [ { "type": "string" @@ -7311,299 +10718,287 @@ "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." + "title": "Observation Period" }, - "sentence_plan": { + "scaling": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/SentenceToken" - }, - "type": "array" + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Scaling" + }, + "first_year": { + "anyOf": [ + { + "type": "string" }, { "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." + "title": "First Year" }, - "restatement": { + "last_year": { "anyOf": [ { - "$ref": "#/components/schemas/ParsedPart" + "type": "string" }, { "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." - }, - "entity_refs": { - "items": { - "$ref": "#/components/schemas/EntityRefs" - }, - "type": "array", - "title": "Entity Refs", - "description": "the binding of each entity of `restatement`, one per restatement.entities row, in row order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" - }, - "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, whole_total_read, whole_total_unpublished, 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" + "title": "Last Year" }, - "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": { + "observations": { "type": "integer", - "const": 1, - "title": "Schema Version", - "default": 1 + "title": "Observations" }, - "definition": { + "places": { "anyOf": [ { - "$ref": "#/components/schemas/CanonicalDefinition" + "type": "integer" }, { "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" + ], + "title": "Places", + "description": "null for a role-bearing variable" } }, - "additionalProperties": false, "type": "object", "required": [ - "schema_version", - "spec_id", - "identity" + "ref", + "label", + "source", + "unit", + "measurement_method", + "observation_period", + "scaling", + "first_year", + "last_year", + "observations", + "places" ], - "title": "DefinitionModel" + "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." }, - "DefinitionOptionsRequest": { + "FacetNationalCurrencyBinding": { "properties": { - "schema_version": { - "type": "integer", - "const": 1, - "title": "Schema Version", - "default": 1 - }, - "definition": { - "$ref": "#/components/schemas/CanonicalDefinition" + "national_currency": { + "$ref": "#/components/schemas/UnitCurrencyRole" } }, "additionalProperties": false, "type": "object", "required": [ - "definition" + "national_currency" ], - "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." + "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." }, - "DefinitionResponse": { + "FacetOptions": { "properties": { - "schema_version": { - "type": "integer", - "const": 1, - "title": "Schema Version", - "default": 1 + "axis": { + "type": "string", + "title": "Axis", + "description": "the facet axis this option set belongs to (see FacetAxis)" }, - "definition": { - "$ref": "#/components/schemas/CanonicalDefinition" + "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": [ - "schema_version", - "definition" + "axis", + "options", + "truncated", + "source" ], - "title": "DefinitionResponse", - "description": "The register door's response: the verified\nidentity, echoed back whole." + "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." }, - "DefinitionText": { + "FacetRefBinding": { "properties": { - "of": { - "$ref": "#/components/schemas/NodeRef", - "description": "the part the text defines" - }, - "text": { - "type": "string", - "title": "Text" + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ref" } }, + "additionalProperties": false, "type": "object", "required": [ - "of", - "text" + "ref" ], - "title": "GraphDefinitionText", - "description": "The graph's prose for one part of a definition." + "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." }, - "Departure": { + "FactSummaryModel": { "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", - "whole_total_read", - "whole_total_unpublished", - "direction_discarded", - "direction_inferred", - "scope_limited" + "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" + } ], - "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. 'whole_total_read': a flow side is read as its whole population, the total its source publishes for every party of that side (official donors (DAC) for 'official donors' or a donor side the request named nothing on or summed over; official and private donors (DAC) for 'all donors'); the text says what the total holds and how to list the side's members: in the question's words ('by donor') on the raw_text door, with open_roles on the others. 'whole_total_unpublished': the request named a whole population ('all donors', 'all recipients') on a side whose dataset publishes no total of it and holds no party outside it, so the side is left unnamed and the answer covers every party the dataset holds there; asked is the request's words, and the text names the dataset. '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.')" + "description": "this component's own [start, end] period window, null where its type defines none" }, - "binding_ref": { + "unit": { "anyOf": [ { "type": "string" }, + { + "$ref": "#/components/schemas/ConvertedUnitModel" + }, + { + "$ref": "#/components/schemas/ComposedUnitModel" + }, { "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" + "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." }, - "asked": { + "change": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Asked", - "description": "what the request named, in its own wording; null when it named nothing" + "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" }, - "shown": { + "source_refs": { "anyOf": [ { - "type": "string" + "items": { + "type": "string" + }, + "type": "array" }, { "type": "null" } ], - "title": "Shown", - "description": "what the answer shows instead, as the heading states it; null when nothing" + "title": "Source Refs", + "description": "every distinct raw provenance ref a source_card's frame carries. It is null for every other member." }, - "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" + "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": [ - "code", - "text" + "changed", + "series", + "series_cut", + "window", + "unit", + "change", + "source_refs", + "defaults" ], - "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." + "title": "FactSummaryModel", + "description": "The closed, token-capped fact summary a revision reports." }, - "DeploymentFacetPolicy": { + "FactSummarySeriesEntry": { "properties": { - "policy": { - "type": "string", - "title": "Policy", - "description": "the deployment default policy's own id" + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Id", + "description": "this series' own id, null when none could be assigned" }, - "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": { + "label": { "type": "string", - "title": "Ref" + "title": "Label", + "description": "this series' own display label" }, - "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" @@ -7612,25 +11007,10 @@ "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" + "title": "First Value", + "description": "this series' earliest observed value, formatted, null when it has none" }, - "label": { + "last_value": { "anyOf": [ { "type": "string" @@ -7639,38 +11019,38 @@ "type": "null" } ], - "title": "Label" - }, - "variables": { - "type": "integer", - "minimum": 0.0, - "title": "Variables" + "title": "Last Value", + "description": "this series' latest observed value, formatted, null when it has none" } }, "additionalProperties": false, "type": "object", "required": [ - "ref", + "id", "label", - "variables" + "coordinates", + "point_count", + "first_value", + "last_value" ], - "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." + "title": "FactSummarySeriesEntry", + "description": "One `fact_summary.series[]` entry. It reports one visible series'\nidentity, point count and formatted boundary values." }, - "DescriptionValuesPage": { - "$id": "https://schemas.dfo.one.org/datasets/v1/description-values-page.json", + "FlowAccount": { + "type": "string", + "const": "provider" + }, + "FormatOptionModel": { "properties": { - "property": { - "$ref": "#/components/schemas/DescribedProperty" + "name": { + "type": "string", + "title": "Name" }, - "items": { - "items": { - "$ref": "#/components/schemas/DescribedValue" - }, - "type": "array", - "title": "Items" + "state": { + "type": "string", + "title": "State" }, - "next_cursor": { + "reason": { "anyOf": [ { "type": "string" @@ -7679,533 +11059,560 @@ "type": "null" } ], - "title": "Next Cursor" - }, - "complete": { - "type": "boolean", - "title": "Complete" + "title": "Reason" } }, "additionalProperties": false, "type": "object", "required": [ - "property", - "items", - "next_cursor", - "complete" + "name", + "state" ], - "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." + "title": "FormatOptionModel" }, - "DiagnosticModel": { + "FrameCurrent": { "properties": { - "code": { - "type": "string", - "title": "Code" - }, - "severity": { + "status": { "type": "string", - "title": "Severity" + "const": "current", + "title": "Status", + "default": "current" }, - "message": { - "type": "string", - "title": "Message" + "frame": { + "$ref": "#/components/schemas/FramePair", + "description": "the named frame, which is its rendering's current one" } }, "additionalProperties": false, "type": "object", "required": [ - "code", - "severity", - "message" + "frame" ], - "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." + "title": "FrameCurrent" }, - "Diagnostics": { + "FrameDimensionMatch": { "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": { + "name": { "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}, plus {jev_input_tokens, jev_output_tokens} when Jev answered a call" + "title": "Name", + "description": "this dimension's own column name" }, - "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." + "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": [ - "engine_build", - "trace_id", - "warnings" + "name", + "values", + "matched_count" ], - "title": "Diagnostics", - "description": "Run health, warnings, timing, and build stamp." + "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." }, - "DimensionNoun": { + "FrameDimensionSummary": { "properties": { - "singular": { + "name": { "type": "string", - "title": "Singular" + "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": "string", - "title": "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": [ - "singular", + "name", + "values", + "total_count", + "truncated", "plural" ], - "title": "DimensionNoun", - "description": "What one member of a flow dimension is called, and several of them." + "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." }, - "DocumentErrorEntry": { + "FrameDimensionValuesResponse": { "properties": { - "member": { + "dimension": { "type": "string", - "enum": [ - "transformation_log", - "version_history", - "methodology.description", - "data_notes" - ], - "title": "Member", - "description": "the wire path the document fills" + "title": "Dimension", + "description": "the dimension this response reports" }, - "line": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Line", - "description": "1-based line in the decoded document where the problem starts, or null" + "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" }, - "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" + "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": [ - "member", - "line", - "reason" + "dimension", + "values", + "total_count" ], - "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`." + "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." }, - "DownloadFacts": { + "FrameFilteredViewResponse": { "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" + "dimensions": { + "items": { + "$ref": "#/components/schemas/FrameDimensionMatch" + }, + "type": "array", + "title": "Dimensions", + "description": "every dimension this frame declares, filtered" }, - "window": { - "anyOf": [ - { - "$ref": "#/components/schemas/TimeWindow" - }, - { - "type": "null" - } - ], - "description": "the first and last years of the file's points; null when rows is null" + "period_grain": { + "type": "string", + "title": "Period Grain", + "description": "this frame's own period grain" }, - "licence": { + "coverage": { "anyOf": [ { - "$ref": "#/components/schemas/DownloadLicence" + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 }, { "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" + "title": "Coverage", + "description": "this frame's own [start, end] period coverage, null if it has none" } }, "additionalProperties": false, "type": "object", "required": [ - "rows_exact" + "dimensions", + "period_grain", + "coverage" ], - "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`." + "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." }, - "DownloadLicence": { + "FrameMoved": { "properties": { - "label": { + "status": { "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" + "const": "moved", + "title": "Status", + "default": "moved" }, - "covered": { - "type": "integer", - "title": "Covered" + "frame": { + "$ref": "#/components/schemas/FramePair", + "description": "the current frame of the named frame's rendering" } }, "additionalProperties": false, "type": "object", "required": [ - "entities", - "covered" + "frame" ], - "title": "EnrichmentCoverageCountsModel" + "title": "FrameMoved" }, - "EnrichmentOptionModel": { + "FramePair": { "properties": { - "column": { - "type": "string", - "title": "Column" - }, - "field": { - "type": "string", - "title": "Field" - }, - "token": { + "spec_id": { "type": "string", - "title": "Token" + "title": "Spec Id" }, - "state": { + "content_version": { "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 + "title": "Content Version" } }, "additionalProperties": false, "type": "object", "required": [ - "column", - "field", - "token", - "state", - "coverage" + "spec_id", + "content_version" ], - "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." + "title": "FramePair" }, - "EntityCounts": { + "FramePending": { "properties": { - "parties": { - "type": "integer", - "title": "Parties", - "description": "entities with figures of their own" - }, - "private": { - "type": "integer", - "title": "Private", - "description": "the parties whose class is private, a subset of parties" - }, - "totals": { - "type": "integer", - "title": "Totals", - "description": "entities that hold other entities' figures" + "status": { + "type": "string", + "const": "pending", + "title": "Status", + "default": "pending" }, - "residual": { - "type": "integer", - "title": "Residual", - "description": "entities holding figures no other entity does" + "operation_id": { + "type": "string", + "title": "Operation Id", + "description": "the queued rebuild, pollable on the operations route" }, - "unclassified": { - "type": "integer", - "title": "Unclassified", - "description": "entities the code index does not list" + "retry_after_s": { + "type": "number", + "title": "Retry After S", + "description": "seconds to wait before calling again" } }, + "additionalProperties": false, "type": "object", "required": [ - "parties", - "private", - "totals", - "residual", - "unclassified" + "operation_id", + "retry_after_s" ], - "title": "GraphAvailabilityEntityCounts", - "description": "The distinct entities in one role, split by their kind in the code index." + "title": "FramePending" }, - "EntityCoverage": { + "FrameStructuralViewResponse": { "properties": { - "entity": { - "$ref": "#/components/schemas/StepRef" + "dimensions": { + "items": { + "$ref": "#/components/schemas/FrameDimensionSummary" + }, + "type": "array", + "title": "Dimensions", + "description": "every dimension this frame declares" }, - "periods": { - "type": "integer", - "minimum": 0.0, - "title": "Periods" + "period_grain": { + "type": "string", + "title": "Period Grain", + "description": "this frame's own period grain" }, - "of": { + "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", - "minimum": 0.0, - "title": "Of" + "title": "Series Count", + "description": "how many distinct series this frame resolves" } }, "additionalProperties": false, "type": "object", "required": [ - "entity", - "periods", - "of" + "dimensions", + "period_grain", + "coverage", + "series_count" ], - "title": "EntityCoverage", - "description": "How many of the window's periods one ranked entity holds." + "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." }, - "EntityGroup": { + "Freshness": { "properties": { - "ref": { + "release_frequency": { "anyOf": [ { - "type": "string", - "maxLength": 1024 + "type": "string" }, { "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" + "title": "Release Frequency" }, - "entity_type": { + "release_frequency_label": { "anyOf": [ { - "type": "string", - "maxLength": 1024 + "type": "string" }, { "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" + "title": "Release Frequency Label" }, - "total": { + "refresh_type": { "anyOf": [ { - "type": "string", - "maxLength": 1024 + "type": "string" }, { "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" + "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" }, - "group_id": { + "label": { "anyOf": [ { - "type": "string", - "maxLength": 1024 + "type": "string" }, { "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" + "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" }, - "whole_of": { + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types", + "description": "the node's typeOf values, as the graph holds them" + }, + "description": { "anyOf": [ { - "items": { - "type": "string", - "enum": [ - "official", - "private", - "residual" - ] - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "title": "Whole Of", - "description": "the classes of party the role's whole population covers, sorted: official, private or residual, e.g. [\"official\"] for Official Donors, Total, which holds every official donor and no private one; absent for any other group" + "title": "Description", + "description": "the node's prose in the graph; null when it has none" }, - "side_classes": { + "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": [ { - "items": { - "type": "string", - "enum": [ - "official", - "private", - "residual" - ] + "additionalProperties": { + "type": "integer", + "maximum": 99.0, + "minimum": 0.0 }, - "type": "array" + "type": "object", + "minProperties": 1 }, { "type": "null" } ], - "title": "Side Classes", - "description": "for a role read as its whole population, the classes of party, totals aside, the answer's dataset publishes on that side, sorted, e.g. [\"official\", \"private\", \"residual\"] for donors in DAC2a; a class here and not in whole_of, such as \"private\", is outside the total. Absent for any other group. Derived from the identity on every answer; a posted value is ignored" + "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": [ - "label" + "by", + "op" ], - "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 role read as the whole population of\nits side, the source's total of every party there (\"Official Donors, Total\")\nor a union of such totals (\"all donors including private\"), states the\nclasses of party that population covers in `whole_of`, and the classes the answer's\ndataset publishes on that side in `side_classes`; a resubmit derives both from the\nidentity and the code index, whatever it posts. 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`)." + "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`)." }, - "EntityOptions": { + "GroupbyOptionsModel": { "properties": { - "entity_ref": { + "state": { + "type": "string", + "title": "State" + }, + "reason": { "anyOf": [ { "type": "string" @@ -8214,368 +11621,232 @@ "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" + "title": "Reason" }, - "options": { + "axes": { "items": { - "$ref": "#/components/schemas/SlotOption" + "additionalProperties": true, + "type": "object" }, "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" + "title": "Axes" } }, "additionalProperties": false, "type": "object", "required": [ - "role", - "options", - "truncated", - "source" + "state" ], - "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." + "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`." }, - "EntityRef": { + "Headline": { "properties": { - "ref": { - "type": "string", - "title": "Ref" + "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" }, - "label": { - "type": "string", - "title": "Label" + "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`" }, - "kind": { + "named_window": { "anyOf": [ { - "type": "string", - "enum": [ - "country", - "continent", - "subregion", - "continental_union", - "place_other", - "aggregate", - "organisation", - "group", - "stat_var", - "code_system", - "code", - "unit", - "source", - "dataset", - "provenance", - "other" - ] + "$ref": "#/components/schemas/TimeWindow" }, { "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." - }, - "EntityRefs": { - "properties": { - "text": { - "type": "string", - "title": "Text", - "description": "the entity text, equal to restatement.entities[i].text, where i is this entry's position in Part.entity_refs" + "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" }, - "refs": { + "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": { - "type": "string" + "$ref": "#/components/schemas/HeadlineYear" }, "type": "array", - "title": "Refs", - "description": "the refs the part's answer binds for `text`: a place gives its node; a group, continent or subregion bound as itself gives its own node, or the total its dataset publishes for it (G7 bound as GroupOfSeven); one bound as its members gives the set's own ref first (its node, else that total, else its registry id) and then the members, sorted. [] for an ambiguous text, one that resolved to no node or a node the answer does not bind, and every text of a part refused before its places were bound" + "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": [ - "text", - "refs" + "year", + "year_named", + "observations", + "series", + "role_counts", + "recent_years" ], - "title": "EntityRefs", - "description": "The graph nodes one entity row of a part's restatement binds in the answer." + "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." }, - "EntityYearsModel": { + "HeadlineYear": { "properties": { - "ref": { - "type": "string", - "title": "Ref", - "description": "the entity's `dcid:` ref" + "year": { + "type": "integer", + "title": "Year", + "description": "the calendar year these counts are for" }, - "years": { - "items": { - "type": "string" + "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": "array", - "title": "Years", - "description": "the years left out, as runs of consecutive years, `1990-2001` or `2004`" + "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": [ - "ref", - "years" + "year", + "observations", + "series", + "role_counts" ], - "title": "EntityYearsModel", - "description": "One entity a conversion left rows out of, and the years of those rows\n(`materialise.codes.EntityYears`)." + "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." }, - "Exclusion": { + "HealthResponse": { "properties": { - "ref": { + "status": { "type": "string", - "title": "Ref" + "const": "ok", + "title": "Status", + "description": "always \"ok\" for a 200 response" }, - "reason": { + "build": { "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" + "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": [ - "ref", - "reason" + "status", + "build", + "capability_version" ], - "title": "Exclusion", - "description": "A provenance a base source holds that this deployment does not admit, because\nanother Data Commons supersedes it." + "title": "HealthResponse", + "description": "`GET /healthz`'s own response body, shared across every surface." }, - "Expansion": { + "IdentityBindingExact": { "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=[]" + "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": [ - "added" + "ref" ], - "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." + "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." }, - "FacetItem": { + "IdentityBindingSet": { "properties": { - "ref": { + "state": { "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" + "const": "set", + "title": "State", + "default": "set" }, - "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" + "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": [ - "national_currency" + "refs" ], - "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." + "title": "IdentityBindingSet", + "description": "A bound dcid set, in the identity core's own binding wire shape." }, - "FacetOptions": { + "IdentityBindingUnbound": { "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": { + "state": { "type": "string", - "enum": [ - "observed", - "seed" - ], - "title": "Source", - "description": "always 'observed' -- a facet axis has no curated seed taxonomy" + "const": "unbound", + "title": "State", + "default": "unbound" } }, "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." + "title": "IdentityBindingUnbound", + "description": "An unbound slot/facet binding." }, - "FacetRefBinding": { + "IdentityBindingValue": { "properties": { + "state": { + "type": "string", + "const": "value", + "title": "State", + "default": "value" + }, "ref": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Ref" + "type": "string", + "maxLength": 1024, + "title": "Ref", + "description": "the bound dcid" } }, "additionalProperties": false, @@ -8583,758 +11854,558 @@ "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." + "title": "IdentityBindingValue", + "description": "A single bound dcid, in the identity core's own binding wire shape." }, - "FactSummaryModel": { + "IdentityCurrencyRole": { "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" - } + "role": { + "type": "string", + "enum": [ + "observationAbout", + "origin", + "destination" ], - "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" + "title": "Role", + "description": "the entity role whose bound entity's currency this request means" } }, "additionalProperties": false, "type": "object", "required": [ - "changed", - "series", - "series_cut", - "window", - "unit", - "change", - "source_refs", - "defaults" + "role" ], - "title": "FactSummaryModel", - "description": "The closed, token-capped fact summary a revision reports." + "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)." }, - "FactSummarySeriesEntry": { + "IdentityFacetValueAbsent": { "properties": { - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id", - "description": "this series' own id, null when none could be assigned" - }, - "label": { + "state": { "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" + "const": "value", + "title": "State", + "default": "value" }, - "last_value": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Last Value", - "description": "this series' latest observed value, formatted, null when it has none" + "ref": { + "type": "null", + "title": "Ref", + "description": "null: the facet declares no value on this axis" } }, "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" + "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`." }, - "FormatOptionModel": { + "IdentityFacetValueRequest": { "properties": { - "name": { - "type": "string", - "title": "Name" - }, "state": { "type": "string", - "title": "State" + "const": "value", + "title": "State", + "default": "value" }, - "reason": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Reason" + "request": { + "$ref": "#/components/schemas/IdentityUnitRequest", + "description": "the completed unit-conversion request" } }, "additionalProperties": false, "type": "object", "required": [ - "name", - "state" + "request" ], - "title": "FormatOptionModel" + "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)." }, - "FrameCurrent": { + "IdentityShapeDenominatorRef": { "properties": { - "status": { + "ref": { "type": "string", - "const": "current", - "title": "Status", - "default": "current" - }, - "frame": { - "$ref": "#/components/schemas/FramePair", - "description": "the named frame, which is its rendering's current one" + "maxLength": 1024, + "title": "Ref", + "description": "the resolved denominator StatVar's dcid" } }, "additionalProperties": false, "type": "object", "required": [ - "frame" + "ref" ], - "title": "FrameCurrent" + "title": "IdentityShapeDenominatorRef", + "description": "The described arm's `measurement_denominator`, resolved to a dcid." }, - "FrameDimensionMatch": { + "IdentityShapeDenominatorUnresolved": { "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" + "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", - "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." + "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." }, - "FrameDimensionSummary": { + "IdentityShapePin": { "properties": { - "name": { + "kind": { "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" + "const": "stat_var", + "title": "Kind", + "default": "stat_var" }, - "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" + "id": { + "type": "string", + "maxLength": 1024, + "title": "Id", + "description": "the pinned StatVar's dcid" } }, "additionalProperties": false, "type": "object", "required": [ - "name", - "values", - "total_count", - "truncated", - "plural" + "id" ], - "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." + "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." }, - "FrameDimensionValuesResponse": { + "IdentityShapeSchema": { "properties": { - "dimension": { + "kind": { "type": "string", - "title": "Dimension", - "description": "the dimension this response reports" + "const": "statvar_schema", + "title": "Kind", + "default": "statvar_schema" }, - "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" + "population_type": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Population Type", + "description": "the graph populationType dcid" }, - "total_count": { - "type": "integer", - "title": "Total Count", - "description": "how many values this dimension carries, or how many match `query` when it is given" + "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", - "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." + "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`)." }, - "FrameFilteredViewResponse": { + "IdentitySlot": { "properties": { - "dimensions": { - "items": { - "$ref": "#/components/schemas/FrameDimensionMatch" - }, - "type": "array", - "title": "Dimensions", - "description": "every dimension this frame declares, filtered" - }, - "period_grain": { + "property": { "type": "string", - "title": "Period Grain", - "description": "this frame's own period grain" + "maxLength": 1024, + "title": "Property", + "description": "the constraint property dcid" }, - "coverage": { - "anyOf": [ + "binding": { + "oneOf": [ + { + "$ref": "#/components/schemas/IdentityBindingValue" + }, + { + "$ref": "#/components/schemas/IdentityBindingSet" + }, { - "prefixItems": [ - { - "type": "string" - }, - { - "type": "string" - } - ], - "type": "array", - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/IdentityBindingUnbound" }, { - "type": "null" + "$ref": "#/components/schemas/IdentityBindingExact" } ], - "title": "Coverage", - "description": "this frame's own [start, end] period coverage, null if it has none" + "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": [ - "dimensions", - "period_grain", - "coverage" + "property", + "binding" ], - "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." + "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." }, - "FrameMoved": { + "IdentityUnitRequest": { "properties": { - "status": { + "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", - "const": "moved", - "title": "Status", - "default": "moved" + "enum": [ + "current", + "constant" + ], + "title": "Prices", + "description": "'current' (nominal) prices, or 'constant' (real, base_year-anchored) prices" }, - "frame": { - "$ref": "#/components/schemas/FramePair", - "description": "the current frame of the named frame's rendering" + "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": [ - "frame" + "currency", + "prices" ], - "title": "FrameMoved" + "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." }, - "FramePair": { + "IdentityWindowAll": { "properties": { - "spec_id": { - "type": "string", - "title": "Spec Id" - }, - "content_version": { + "kind": { "type": "string", - "title": "Content Version" + "const": "all", + "title": "Kind", + "default": "all" } }, "additionalProperties": false, "type": "object", - "required": [ - "spec_id", - "content_version" - ], - "title": "FramePair" + "title": "IdentityWindowAll", + "description": "No date signal was requested at all." }, - "FramePending": { + "IdentityWindowLatest": { "properties": { - "status": { - "type": "string", - "const": "pending", - "title": "Status", - "default": "pending" - }, - "operation_id": { + "kind": { "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" + "const": "latest", + "title": "Kind", + "default": "latest" } }, "additionalProperties": false, "type": "object", - "required": [ - "operation_id", - "retry_after_s" - ], - "title": "FramePending" + "title": "IdentityWindowLatest", + "description": "An explicit latest-ask: re-resolve to whatever year is CURRENTLY latest." }, - "FrameStructuralViewResponse": { + "IdentityWindowRange": { "properties": { - "dimensions": { - "items": { - "$ref": "#/components/schemas/FrameDimensionSummary" - }, - "type": "array", - "title": "Dimensions", - "description": "every dimension this frame declares" - }, - "period_grain": { + "kind": { "type": "string", - "title": "Period Grain", - "description": "this frame's own period grain" + "const": "range", + "title": "Kind", + "default": "range" }, - "coverage": { + "start_year": { "anyOf": [ { - "prefixItems": [ - { - "type": "string" - }, - { - "type": "string" - } - ], - "type": "array", - "maxItems": 2, - "minItems": 2 + "type": "integer", + "maximum": 9007199254740991.0, + "minimum": -9007199254740991.0 }, { "type": "null" } ], - "title": "Coverage", - "description": "this frame's own [start, end] period coverage, null if it has none" + "title": "Start Year", + "description": "absent means open-ended start" }, - "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": { + "end_year": { "anyOf": [ { - "type": "string" + "type": "integer", + "maximum": 9007199254740991.0, + "minimum": -9007199254740991.0 }, { "type": "null" } ], - "title": "Release Frequency" - }, - "release_frequency_label": { - "anyOf": [ - { - "type": "string" - }, - { - "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": {}, + "LedgerStep": { + "properties": { + "axis": { + "type": "string", + "enum": [ + "sector", + "region", + "measure_basis", + "provider" ], - "title": "Release Frequency Label" + "title": "Axis", + "description": "the axis switched" }, - "refresh_type": { + "prior": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/Entry" }, { "type": "null" } ], - "title": "Refresh Type" + "description": "the entry the switch replaced; None for a default" + }, + "applied": { + "$ref": "#/components/schemas/Entry", + "description": "the entry the switch applied" + }, + "revision": { + "type": "integer", + "minimum": 0.0, + "title": "Revision", + "description": "the plan revision the switch was made on" } }, + "additionalProperties": false, "type": "object", "required": [ - "release_frequency", - "release_frequency_label", - "refresh_type" + "axis", + "prior", + "applied", + "revision" ], - "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`." + "title": "LedgerStep", + "description": "One switch: the entry it replaced and the entry it applied.\n\nSearch answers with `ledger: []`. A client that records its switches fills it, and can\nundo one by posting the prior entry back." }, - "GraphRef": { + "LeftOut": { "properties": { - "ref": { + "reason": { "type": "string", - "title": "Ref", - "description": "the graph identifier" + "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" }, - "label": { + "role": { "type": "string", - "title": "Label", - "description": "plain-language display name, read from the graph" + "pattern": "^[a-z][A-Za-z0-9]{0,63}$", + "title": "Role" } }, "additionalProperties": false, "type": "object", "required": [ - "ref", - "label" + "reason", + "count", + "of" ], - "title": "GraphRef", - "description": "Every graph identifier in the contract." + "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." }, - "GraphSchema": { + "LeftOutSeriesBody": { "properties": { - "schemas": { + "root": { + "type": "integer", + "minimum": 0.0, + "title": "Root", + "description": "the population the series belongs to, by position" + }, + "coordinates": { "additionalProperties": { - "additionalProperties": true, - "type": "object" + "type": "string" }, "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" + "title": "Coordinates" } }, + "additionalProperties": false, "type": "object", "required": [ - "schemas", - "capabilities" + "root", + "coordinates" ], - "title": "GraphSchema", - "description": "The full `GET /api/graph/schema` document." + "title": "LeftOutSeriesBody" }, - "GroupNode": { + "Manifest": { "properties": { - "ref": { + "schema_version": { + "type": "integer", + "title": "Schema Version", + "default": 1 + }, + "definition": { + "$ref": "#/components/schemas/DefinitionModel" + }, + "content_version": { "type": "string", - "title": "Ref", - "description": "the node's dcid" + "title": "Content Version" }, - "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" + "prepared_at": { + "type": "string", + "format": "date-time", + "title": "Prepared At" }, - "types": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Types", - "description": "the node's typeOf values, as the graph holds them" + "coverage": { + "$ref": "#/components/schemas/CoverageModel" }, - "description": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Description", - "description": "the node's prose in the graph; null when it has none" + "citation": { + "$ref": "#/components/schemas/CitationModel" }, - "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" + "trace": { + "$ref": "#/components/schemas/TraceModel" }, - "gaps": { + "warnings": { "items": { - "type": "string" + "$ref": "#/components/schemas/WarningModel" }, "type": "array", - "title": "Gaps", - "description": "the member path of every value this door cannot know" + "title": "Warnings" }, - "built_from": { - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "enum": [ - "code_index", - "origin_catalogue", - "coverage_index", - "membership" - ] + "diagnostics": { + "items": { + "$ref": "#/components/schemas/DiagnosticModel" }, - "type": "object", - "title": "Built From", - "description": "the build of each table the response read" - }, - "kind": { - "type": "string", - "const": "group", - "title": "Kind", - "default": "group" + "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" }, - "group": { - "$ref": "#/components/schemas/MembershipBlock" - } - }, - "type": "object", - "required": [ - "ref", - "label", - "types", - "description", - "links", - "gaps", - "built_from", - "kind", - "group" - ], - "title": "GroupNode" - }, - "GroupbyOptions": { - "properties": { - "by": { + "artifacts": { "items": { - "type": "string", - "minLength": 1 + "$ref": "#/components/schemas/ArtifactEntryModel" }, "type": "array", - "minItems": 1, - "uniqueItems": true, - "title": "By" - }, - "op": { - "type": "string", - "const": "sum", - "title": "Op" + "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" }, - "levels": { + "series_count": { "anyOf": [ { - "additionalProperties": { - "type": "integer", - "maximum": 99.0, - "minimum": 0.0 - }, - "type": "object", - "minProperties": 1 + "type": "integer" }, { "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" + "title": "Series Count" }, - "reason": { + "output_options": { + "anyOf": [ + { + "$ref": "#/components/schemas/OutputOptionsModel" + }, + { + "type": "null" + } + ] + }, + "series_coverage_stamp": { "anyOf": [ { "type": "string" @@ -9343,827 +12414,1037 @@ "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`" + "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)" }, - "named_window": { + "retention": { "anyOf": [ { - "$ref": "#/components/schemas/TimeWindow" + "$ref": "#/components/schemas/RetentionModel" }, { "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" + "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": [ - "year", - "observations", - "series", - "role_counts" + "definition", + "content_version", + "prepared_at", + "coverage", + "citation", + "trace", + "artifacts" ], - "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." + "title": "Manifest", + "description": "`trace` is a plain dict at run time, since `materialise.trace.ManifestTrace.to_dict()`\nis already this field's wire shape. Its type (`TraceModel`) fixes the shape of\n`party_totals_left_out` and leaves every other key open.\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." }, - "HealthResponse": { + "Matched": { "properties": { - "status": { - "type": "string", - "const": "ok", - "title": "Status", - "description": "always \"ok\" for a 200 response" - }, - "build": { + "text": { "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" + "title": "Text" }, - "capability_version": { + "as": { "type": "string", - "title": "Capability Version", - "description": "this surface's own capability_version token" + "enum": [ + "name", + "alias", + "code" + ], + "title": "As" } }, "type": "object", "required": [ - "status", - "build", - "capability_version" + "text", + "as" ], - "title": "HealthResponse", - "description": "`GET /healthz`'s own response body, shared across every surface." + "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`." }, - "IdentityBindingExact": { + "Measure": { "properties": { - "state": { - "type": "string", - "const": "exact", - "title": "State", - "default": "exact" - }, - "ref": { + "label": { "type": "string", - "maxLength": 1024, - "title": "Ref", - "description": "the bound dcid, denoting that code alone" + "title": "Label", + "description": "the measure's noun phrase, such as `net disbursements`" } }, - "additionalProperties": false, "type": "object", "required": [ - "ref" + "label" ], - "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." + "title": "GraphDefinitionMeasure", + "description": "What the variable counts or sums, as the code index names it." }, - "IdentityBindingSet": { + "MeasureAxisValue": { "properties": { - "state": { + "axis": { "type": "string", - "const": "set", - "title": "State", - "default": "set" + "title": "Axis", + "description": "the declared measure-axis identifier (code_index.types.MeasureAxis.axis), e.g. 'measuredProperty' or a constraint-property dcid such as 'financialFlowType'" }, - "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)" + "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": [ - "refs" + "axis", + "value" ], - "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." + "title": "MeasureAxisValue", + "description": "One measure axis and the value a measure partition holds on it (see\nResolvedSpec.measure_axis_values)." }, - "IdentityBindingValue": { + "MemberItem": { "properties": { - "state": { - "type": "string", - "const": "value", - "title": "State", - "default": "value" - }, "ref": { "type": "string", - "maxLength": 1024, - "title": "Ref", - "description": "the bound dcid" + "title": "Ref" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label" } }, - "additionalProperties": false, "type": "object", "required": [ - "ref" + "ref", + "label" ], - "title": "IdentityBindingValue", - "description": "A single bound dcid, in the identity core's own binding wire shape." + "title": "GraphMemberItem", + "description": "One item of a list: its dcid and the owner's label for it, `null` where the owner holds\nno name." }, - "IdentityCurrencyRole": { + "MembersEnvelope": { + "$id": "https://schemas.dfo.one.org/datasets/v1/members-envelope.json", "properties": { - "role": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 + }, + "spec_id": { "type": "string", - "enum": [ - "observationAbout", - "origin", - "destination" + "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": "Role", - "description": "the entity role whose bound entity's currency this request means" + "title": "Family Member Digest" } }, "additionalProperties": false, "type": "object", "required": [ - "role" + "schema_version", + "spec_id", + "members", + "served_count", + "family_member_count", + "family_member_digest" ], - "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)." + "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." }, - "IdentityFacetValueAbsent": { + "MembersPage": { "properties": { - "state": { - "type": "string", - "const": "value", - "title": "State", - "default": "value" - }, "ref": { - "type": "null", + "type": "string", "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": { + "description": "the node whose list this is" + }, + "relation": { "type": "string", - "const": "value", - "title": "State", - "default": "value" + "enum": [ + "codes", + "children", + "datasets", + "variables", + "members", + "countries", + "facets" + ], + "title": "Relation" }, - "request": { - "$ref": "#/components/schemas/IdentityUnitRequest", - "description": "the completed unit-conversion request" + "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" } }, - "additionalProperties": false, "type": "object", "required": [ - "request" + "ref", + "relation", + "projection", + "as_of", + "items", + "next_cursor", + "complete", + "total", + "gaps", + "built_from" ], - "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)." + "title": "GraphMembersPage", + "description": "One page of `GET /api/graph/node/{dcid}/members`." }, - "IdentityShapeDenominatorRef": { + "MembershipBlock": { "properties": { - "ref": { - "type": "string", - "maxLength": 1024, - "title": "Ref", - "description": "the resolved denominator StatVar's dcid" + "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" } }, - "additionalProperties": false, "type": "object", "required": [ - "ref" + "authority", + "as_of", + "effective_date", + "projections" ], - "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." + "title": "GraphMembershipBlock", + "description": "A group's or region's membership under its declared authority." }, - "IdentityShapePin": { + "Methodology": { "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" + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description", + "description": "how the publisher collects and compiles the data, as CommonMark" } }, - "additionalProperties": false, "type": "object", "required": [ - "id" + "description" ], - "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." + "title": "Methodology" }, - "IdentityShapeSchema": { + "MintOptions": { "properties": { - "kind": { + "format": { "type": "string", - "const": "statvar_schema", - "title": "Kind", - "default": "statvar_schema" + "enum": [ + "csv", + "xlsx", + "parquet" + ], + "title": "Format", + "default": "csv" }, - "population_type": { + "bundle": { + "type": "boolean", + "title": "Bundle", + "default": true + }, + "groupby": { "anyOf": [ { - "type": "string", - "maxLength": 1024 + "$ref": "#/components/schemas/GroupbyOptions" }, { "type": "null" } - ], - "title": "Population Type", - "description": "the graph populationType dcid" + ] }, - "measured_property": { + "pivot": { "anyOf": [ { - "type": "string", - "maxLength": 1024 + "$ref": "#/components/schemas/PivotOptions" }, { "type": "null" } - ], - "title": "Measured Property", - "description": "the graph measuredProperty dcid" + ] }, - "stat_type": { + "columns": { "anyOf": [ { - "type": "string", - "maxLength": 1024 + "items": { + "type": "string", + "minLength": 1 + }, + "type": "array" }, { "type": "null" } ], - "title": "Stat Type", - "description": "the graph statType dcid, e.g. measuredValue" + "uniqueItems": true, + "title": "Columns" }, - "measurement_qualifier": { + "without_party_totals": { + "type": "boolean", + "title": "Without Party Totals", + "default": false + }, + "enrichment": { "anyOf": [ { "type": "string", - "maxLength": 1024 + "const": "default" }, { "type": "null" } ], - "title": "Measurement Qualifier", - "description": "the graph measurementQualifier dcid, present only when the measured property is qualified" + "title": "Enrichment", + "description": "\"default\" adds the version's default enrichment columns, chosen once it is built from the roles its frame holds: each of observationAbout, financingProvider and financingRecipient it holds takes its _type column, and a flow party role adds party_kind, party_class and party_whole. They join `columns`, or are the columns when it names none, so the result is the request that names them" }, - "measurement_denominator": { + "layout": { "anyOf": [ { - "oneOf": [ - { - "$ref": "#/components/schemas/IdentityShapeDenominatorRef" - }, - { - "$ref": "#/components/schemas/IdentityShapeDenominatorUnresolved" - } - ] + "type": "string", + "const": "frame" }, { "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" + "title": "Layout" } }, "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`)." + "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`enrichment: \"default\"` asks for the version's default enrichment columns\n(`datasets_api.default_enrichment`), resolved once the version is built: they join `columns`,\nor are `columns` when it names none, and the option is dropped before the rendering is keyed,\nrendered or recorded, so the answer is that of a request naming the resolved columns.\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." }, - "IdentitySlot": { + "MintRequest": { "properties": { - "property": { - "type": "string", - "maxLength": 1024, - "title": "Property", - "description": "the constraint property dcid" + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "default": 1 }, - "binding": { + "input": { "oneOf": [ { - "$ref": "#/components/schemas/IdentityBindingValue" + "$ref": "#/components/schemas/SpecIdInput" }, { - "$ref": "#/components/schemas/IdentityBindingSet" - }, + "$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." + }, + "NewestFrameDimensionValuesResponse": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id", + "description": "the served id of the dataset read, which differs from the requested id when that id now serves under another" + }, + "content_version": { + "type": "string", + "title": "Content Version", + "description": "the version of the dataset read, its newest" + }, + "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": [ + "spec_id", + "content_version", + "dimension", + "values", + "total_count" + ], + "title": "NewestFrameDimensionValuesResponse", + "description": "`GET /api/presentation/frames/{spec_id}?dimension=`'s body: one dimension's values in\nthe frame it resolved, and that frame's pair." + }, + "NewestFrameFilteredViewResponse": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id", + "description": "the served id of the dataset read, which differs from the requested id when that id now serves under another" + }, + "content_version": { + "type": "string", + "title": "Content Version", + "description": "the version of the dataset read, its newest" + }, + "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": [ { - "$ref": "#/components/schemas/IdentityBindingUnbound" + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 }, { - "$ref": "#/components/schemas/IdentityBindingExact" + "type": "null" } ], - "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" - } - } + "title": "Coverage", + "description": "this frame's own [start, end] period coverage, null if it has none" } }, "additionalProperties": false, "type": "object", "required": [ - "property", - "binding" + "spec_id", + "content_version", + "dimensions", + "period_grain", + "coverage" ], - "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." + "title": "NewestFrameFilteredViewResponse", + "description": "`GET /api/presentation/frames/{spec_id}?query=`'s body: the filtered view of the frame\nit resolved, and that frame's pair." }, - "IdentityUnitRequest": { + "NewestFrameStructuralViewResponse": { "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" + "spec_id": { + "type": "string", + "title": "Spec Id", + "description": "the served id of the dataset read, which differs from the requested id when that id now serves under another" }, - "prices": { + "content_version": { "type": "string", - "enum": [ - "current", - "constant" - ], - "title": "Prices", - "description": "'current' (nominal) prices, or 'constant' (real, base_year-anchored) prices" + "title": "Content Version", + "description": "the version of the dataset read, its newest" }, - "base_year": { + "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": [ { - "type": "integer", - "maximum": 9007199254740991.0, - "minimum": -9007199254740991.0 + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 }, { "type": "null" } ], - "title": "Base Year", - "description": "required exactly when prices=='constant'; absent when prices=='current'" + "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": [ - "currency", - "prices" + "spec_id", + "content_version", + "dimensions", + "period_grain", + "coverage", + "series_count" ], - "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." + "title": "NewestFrameStructuralViewResponse", + "description": "`GET /api/presentation/frames/{spec_id}`'s body with neither `dimension` nor `query`\ngiven: the structural view of the frame it resolved, and that frame's pair." }, - "IdentityWindowRange": { + "NoData": { "properties": { - "kind": { + "reason": { "type": "string", - "const": "range", - "title": "Kind", - "default": "range" + "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", + "timed_out" + ], + "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; \"timed_out\" means the request reached its time limit before this part was answered (diagnostics.timed_out is true); the question may hold data, so asking it again, alone or narrower, can answer it" }, - "start_year": { + "cause": { "anyOf": [ { - "type": "integer", - "maximum": 9007199254740991.0, - "minimum": -9007199254740991.0 + "$ref": "#/components/schemas/Cause" }, { "type": "null" } ], - "title": "Start Year", - "description": "absent means open-ended start" + "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" }, - "end_year": { + "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\", \"unit_not_resolved\", and \"timed_out\" 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": "integer", - "maximum": 9007199254740991.0, - "minimum": -9007199254740991.0 + "type": "string" }, { "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 + "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" }, - "definition": { - "$ref": "#/components/schemas/DefinitionModel" + "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." }, - "content_version": { - "type": "string", - "title": "Content Version" + "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." }, - "prepared_at": { - "type": "string", - "format": "date-time", - "title": "Prepared At" + "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." }, - "coverage": { - "$ref": "#/components/schemas/CoverageModel" + "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." }, - "citation": { - "$ref": "#/components/schemas/CitationModel" + "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." }, - "trace": { - "additionalProperties": true, - "type": "object", - "title": "Trace" + "entity_terms": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Entity Terms", + "description": "the query entity text responsible for the 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, every name whose flow direction the query leaves untold for role_not_resolved, and every whole population the query directs to the other side of the flow for role_incompatible, which is empty when the refusal has another cause. 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." }, - "warnings": { + "ambiguous_entities": { "items": { - "$ref": "#/components/schemas/WarningModel" + "$ref": "#/components/schemas/AmbiguousEntityGroup" }, "type": "array", - "title": "Warnings" + "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." }, - "diagnostics": { + "source_terms": { "items": { - "$ref": "#/components/schemas/DiagnosticModel" + "type": "string" }, "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" + "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." }, - "artifacts": { + "ambiguous_sources": { "items": { - "$ref": "#/components/schemas/ArtifactEntryModel" + "$ref": "#/components/schemas/AmbiguousSourceGroup" }, "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" + "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." }, - "series_count": { + "unit_alternatives": { "anyOf": [ { - "type": "integer" + "items": { + "$ref": "#/components/schemas/UnitAlternative" + }, + "type": "array" }, { "type": "null" } ], - "title": "Series Count" + "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" }, - "output_options": { + "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/OutputOptionsModel" + "$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" }, - "series_coverage_stamp": { + "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": [ { - "type": "string" + "$ref": "#/components/schemas/GraphRef" }, { "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)" + "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" }, - "retention": { + "found": { "anyOf": [ { - "$ref": "#/components/schemas/RetentionModel" + "$ref": "#/components/schemas/GraphRef" }, { "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" + "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", - "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." + "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." }, - "Matched": { + "NoDataOption": { "properties": { - "text": { - "type": "string", - "title": "Text" + "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" }, - "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'" + "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" }, - "value": { - "$ref": "#/components/schemas/GraphRef", - "description": "the value's dcid and the measure index's label for it, e.g. Gross" + "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" + }, + "entity_choice": { + "anyOf": [ + { + "type": "integer", + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Entity Choice", + "description": "for an entity_ambiguous option, the index into NoData.ambiguous_entities of the group this option settles; null on every other option. Two groups can share one wording ('aid from Congo to Congo' asks 'Congo' for each end), so a client groups an entity menu by this index, never by mentions, and joins it to the sentence slot token with the same entity_choice" } }, "additionalProperties": false, "type": "object", "required": [ - "axis", - "value" + "mentions", + "label", + "data_query" ], - "title": "MeasureAxisValue", - "description": "One measure axis and the value a measure partition holds on it (see\nResolvedSpec.measure_axis_values)." + "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." }, - "MemberItem": { + "NoDataPart": { "properties": { - "ref": { - "type": "string", - "title": "Ref" - }, - "label": { + "variable_text": { "anyOf": [ { "type": "string" @@ -10172,54 +13453,35 @@ "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 + "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." }, - "spec_id": { - "type": "string", - "pattern": "^spec_", - "title": "Spec Id" + "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 }, - "members": { + "warnings": { "items": { - "$ref": "#/components/schemas/ServedMember" + "$ref": "#/components/schemas/Warning" }, "type": "array", - "title": "Members" - }, - "served_count": { - "type": "integer", - "title": "Served Count" + "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." }, - "family_member_count": { + "timing_ms": { "anyOf": [ { - "type": "integer" + "$ref": "#/components/schemas/Timing" }, { "type": "null" } ], - "title": "Family Member Count" + "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." }, - "family_member_digest": { + "rendered_sentence": { "anyOf": [ { "type": "string" @@ -10228,1420 +13490,1900 @@ "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" + "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." }, - "relation": { - "type": "string", - "enum": [ - "codes", - "children", - "datasets", - "variables", - "members", - "countries", - "facets" + "sentence_plan": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SentenceToken" + }, + "type": "array" + }, + { + "type": "null" + } ], - "title": "Relation" + "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." }, - "projection": { + "restatement": { "anyOf": [ { - "$ref": "#/components/schemas/Projection" + "$ref": "#/components/schemas/ParsedPart" }, { "type": "null" } ], - "description": "the membership projection listed; null for a relation that takes none" + "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." }, - "as_of": { + "entity_refs": { + "items": { + "$ref": "#/components/schemas/EntityRefs" + }, + "type": "array", + "title": "Entity Refs", + "description": "the binding of each entity of `restatement`, one per restatement.entities row, in row order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" + }, + "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, member_unavailable, year_unavailable, modelled_values, group_read_as_members, whole_total_read, whole_total_unpublished, 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", - "format": "date" + "type": "string" }, { "type": "null" } ], - "title": "As Of", - "description": "the date membership was read at; null for today" - }, - "items": { + "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": [ { - "$ref": "#/components/schemas/CodeItem" - }, - { - "$ref": "#/components/schemas/FacetItem" + "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/MemberItem" + "$ref": "#/components/schemas/NotHeldEntry" } ] }, "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" + "title": "Nodes" } }, "type": "object", "required": [ - "ref", - "relation", - "projection", - "as_of", - "items", - "next_cursor", - "complete", - "total", - "gaps", - "built_from" + "nodes" ], - "title": "GraphMembersPage", - "description": "One page of `GET /api/graph/node/{dcid}/members`." + "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." }, - "MembershipBlock": { + "NotHeldEntry": { "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" + "ref": { + "type": "string", + "title": "Ref" }, - "projections": { - "items": { - "$ref": "#/components/schemas/ProjectionCount" - }, - "type": "array", - "title": "Projections" + "status": { + "type": "string", + "const": "not_held", + "title": "Status", + "default": "not_held" } }, "type": "object", "required": [ - "authority", - "as_of", - "effective_date", - "projections" + "ref", + "status" ], - "title": "GraphMembershipBlock", - "description": "A group's or region's membership under its declared authority." + "title": "GraphNotHeldEntry", + "description": "A batch entry for a dcid where `GET /api/graph/node/{dcid}` answers 404\n`node_not_held`." }, - "Methodology": { + "ObservationPoint": { "properties": { - "description": { + "date": { + "type": "string", + "title": "Date", + "description": "the observation date, e.g. '2018'" + }, + "value": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "title": "Description", - "description": "how the publisher collects and compiles the data, as CommonMark" + "title": "Value", + "description": "the observed value; null when the graph reports a date with no value" } }, + "additionalProperties": false, "type": "object", "required": [ - "description" + "date", + "value" ], - "title": "Methodology" + "title": "ObservationPoint", + "description": "One (date, value) pair from a resolved StatVar's observation series." }, - "MintOptions": { + "ObservationSeries": { "properties": { - "format": { - "type": "string", - "enum": [ - "csv", - "xlsx", - "parquet" - ], - "title": "Format", - "default": "csv" + "stat_var": { + "$ref": "#/components/schemas/SeriesStatVarRef", + "description": "the StatVar these points observe" }, - "bundle": { - "type": "boolean", - "title": "Bundle", - "default": true + "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')" }, - "groupby": { - "anyOf": [ - { - "$ref": "#/components/schemas/GroupbyOptions" - }, - { - "type": "null" - } - ] + "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" }, - "pivot": { - "anyOf": [ - { - "$ref": "#/components/schemas/PivotOptions" - }, - { - "type": "null" - } - ] + "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)" }, - "columns": { - "anyOf": [ - { - "items": { - "type": "string", - "minLength": 1 - }, - "type": "array" - }, - { - "type": "null" - } - ], - "uniqueItems": true, - "title": "Columns" + "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)" }, - "without_party_totals": { - "type": "boolean", - "title": "Without Party Totals", - "default": false + "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" }, - "layout": { + "conversion": { "anyOf": [ { - "type": "string", - "const": "frame" + "$ref": "#/components/schemas/ObservationSeriesConversion" }, { "type": "null" } ], - "title": "Layout" + "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", - "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." + "required": [ + "stat_var", + "entities", + "points", + "total_obs" + ], + "title": "ObservationSeries", + "description": "One (stat_var, role tuple) pair's observation points, in chronological order." }, - "MintRequest": { + "ObservationSeriesConversion": { "properties": { - "schema_version": { - "type": "integer", - "const": 1, - "title": "Schema Version", - "default": 1 + "recipe_id": { + "type": "string", + "title": "Recipe Id", + "description": "the ConversionRecipe.recipe_id that produced these points" }, - "input": { - "oneOf": [ + "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": [ { - "$ref": "#/components/schemas/SpecIdInput" + "type": "string" }, { - "$ref": "#/components/schemas/StatVarSetInput" + "type": "null" } ], - "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" + "title": "Deflator Table Version", + "description": "the deflator table's own version; absent for a current-prices conversion" }, - "places": { + "fallback_count": { "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" + "title": "Fallback Count", + "description": "rows whose deflator-role entity was substituted with the recipe's fallback entity" }, - "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." + "fallback_examples": { + "items": { + "$ref": "#/components/schemas/SeriesConversionFallbackExample" + }, + "type": "array", + "title": "Fallback Examples", + "description": "a capped, sorted sample of the substituted (entity, fallback_entity) pairs" }, - "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" + "projected_count": { + "type": "integer", + "title": "Projected Count", + "description": "rows whose rate/deflator term was sourced from a projected table row" }, - "relaxation": { - "$ref": "#/components/schemas/Relaxation", - "description": "the definition part this suggestion relaxed, and the value(s) it dropped" + "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": [ - "spec_id", - "definition", - "resolved", - "relaxation" + "recipe_id", + "table_provenance", + "exchange_rate_table_version", + "fallback_count", + "projected_count" ], - "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." + "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." }, - "NoData": { + "ObservationsOmission": { "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", - "timed_out" + "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": "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; \"timed_out\" means the request reached its time limit before this part was answered (diagnostics.timed_out is true); the question may hold data, so asking it again, alone or narrower, can answer it" + "description": "machine-readable cause, equal to the accompanying Warning's code when one fires" }, - "cause": { + "message": { + "type": "string", + "title": "Message", + "description": "human-readable explanation, safe to render directly" + }, + "pairs": { "anyOf": [ { - "$ref": "#/components/schemas/Cause" + "type": "integer" }, { "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" + "title": "Pairs", + "description": "observations_preview_too_large only: the count that was too large" }, - "category": { - "type": "string", - "enum": [ - "unresolved", - "absent" + "cap": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ], - "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\", \"unit_not_resolved\", and \"timed_out\" 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" + "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" }, - "message": { + "hard_failed": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "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" + "title": "Hard Failed", + "description": "observations_no_points (always 0) and observations_probe_failed: dispatched pairs whose fetch itself failed" }, - "nearest_real": { + "facet_rejected": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/NearestRealSpec" - }, - "type": "array" + "type": "integer" }, { "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." + "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" }, - "gate": { + "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": [ { - "type": "string", - "enum": [ - "no_member_has_data_at_place", - "no_member_asserts_bound_properties", - "only_alternate_has_data" - ] + "$ref": "#/components/schemas/GraphRef" }, { "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." + "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" }, - "flagged_match": { + "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": [ { - "$ref": "#/components/schemas/Spec" + "type": "string", + "enum": [ + "place", + "origin", + "destination", + "category", + "year" + ] }, { "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." + "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" }, - "alternate_match": { + "target_year": { "anyOf": [ { - "$ref": "#/components/schemas/Spec" + "type": "integer", + "maximum": 2200.0, + "minimum": 1000.0 }, { "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." + "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." }, - "elected_count": { + "status": { + "type": "string", + "enum": [ + "pending", + "running", + "done", + "failed" + ], + "title": "Status" + }, + "poll": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "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 the 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, every name whose flow direction the query leaves untold for role_not_resolved, and every whole population the query directs to the other side of the flow for role_incompatible, which is empty when the refusal has another cause. 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." + "title": "Poll" }, - "unit_alternatives": { + "retry_after_ms": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/UnitAlternative" - }, - "type": "array" + "type": "integer" }, { "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." + "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." }, - "denominator": { + "progress": { "anyOf": [ { - "$ref": "#/components/schemas/NoDataDenominator" + "$ref": "#/components/schemas/OperationProgress" }, { "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" + ] + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "operation_id", + "status" + ], + "title": "OperationEnvelope" + }, + "OperationProgress": { + "properties": { + "rows_written": { + "type": "integer", + "title": "Rows Written" }, - "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" + "estimate_rows": { + "type": "integer", + "title": "Estimate Rows" } }, "additionalProperties": false, "type": "object", "required": [ - "reason" + "rows_written", + "estimate_rows" ], - "title": "NoData", - "description": "Outcome when no grounded result can be returned." + "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." }, - "NoDataDenominator": { + "OperationResource": { + "$id": "https://schemas.dfo.one.org/datasets/v1/operation-resource.json", "properties": { - "asked": { + "operation": { + "$ref": "#/components/schemas/OperationEnvelope" + }, + "manifest": { "anyOf": [ { - "$ref": "#/components/schemas/GraphRef" + "additionalProperties": true, + "type": "object" }, { "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" + "title": "Manifest" }, - "found": { + "error": { "anyOf": [ { - "$ref": "#/components/schemas/GraphRef" + "additionalProperties": true, + "type": "object" }, { "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)" + "title": "Error" } }, "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." + "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." }, - "NoDataOption": { + "Option": { "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" + "option_id": { + "type": "string", + "maxLength": 128, + "pattern": "^(sector|region|measure_basis|provider):[A-Za-z0-9_+]+$", + "title": "Option Id", + "description": "the option's id" }, "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" + "description": "the option for a reader" }, - "entity_choice": { - "anyOf": [ + "binding": { + "oneOf": [ { - "type": "integer", - "minimum": 0.0 + "$ref": "#/components/schemas/SlotBinding" }, { - "type": "null" + "$ref": "#/components/schemas/EntitiesBinding" + }, + { + "$ref": "#/components/schemas/ShapeBinding" + }, + { + "$ref": "#/components/schemas/ProviderBinding" } ], - "title": "Entity Choice", - "description": "for an entity_ambiguous option, the index into NoData.ambiguous_entities of the group this option settles; null on every other option. Two groups can share one wording ('aid from Congo to Congo' asks 'Congo' for each end), so a client groups an entity menu by this index, never by mentions, and joins it to the sentence slot token with the same entity_choice" + "title": "Binding", + "description": "what the option binds in the identity", + "discriminator": { + "propertyName": "kind", + "mapping": { + "entities": "#/components/schemas/EntitiesBinding", + "provider": "#/components/schemas/ProviderBinding", + "shape": "#/components/schemas/ShapeBinding", + "slot": "#/components/schemas/SlotBinding" + } + } + }, + "availability": { + "$ref": "#/components/schemas/OptionAvailability", + "description": "whether a switch to it can be served" } }, "additionalProperties": false, "type": "object", "required": [ - "mentions", + "option_id", "label", - "data_query" + "binding", + "availability" ], - "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." + "title": "Option", + "description": "One value a scope choice can take." }, - "NoDataPart": { + "OptionAvailability": { "properties": { - "variable_text": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "status": { + "type": "string", + "enum": [ + "available", + "partial", + "unavailable" ], - "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." + "title": "Status", + "description": "available, partial or unavailable" }, - "timing_ms": { + "years": { "anyOf": [ { - "$ref": "#/components/schemas/Timing" + "items": { + "prefixItems": [ + { + "type": "integer" + }, + { + "type": "integer" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + "type": "array" }, { "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." + "title": "Years", + "description": "the years a partial option covers, as closed spans; None otherwise" }, - "rendered_sentence": { + "code": { "anyOf": [ { - "type": "string" + "type": "string", + "enum": [ + "provider_not_offered", + "imputed_coverage", + "basis_not_published", + "residuals_need_summed_region", + "conflicts_with", + "carried_choice_not_applied", + "stated_choice_not_applied", + "option_not_covered", + "contributions_counted" + ] }, { "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." + "title": "Code", + "description": "why the option is partial or unavailable; None when available" }, - "sentence_plan": { + "detail": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Detail", + "description": "the code's parameters: `why` for provider_not_offered, `dataset` for basis_not_published and contributions_counted, `entry` and `cause` for conflicts_with" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "status" + ], + "title": "OptionAvailability", + "description": "Whether an option can be served, and why not." + }, + "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": [ { - "items": { - "$ref": "#/components/schemas/SentenceToken" - }, - "type": "array" + "$ref": "#/components/schemas/OutputOptionsModel" }, { "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": { + "warnings": { + "items": { + "$ref": "#/components/schemas/WarningModel" + }, + "type": "array", + "title": "Warnings" + }, + "trace": { + "$ref": "#/components/schemas/TraceModel" + } + }, + "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": [ { - "$ref": "#/components/schemas/ParsedPart" + "type": "string", + "enum": [ + "peers", + "children" + ] }, { "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." - }, - "entity_refs": { - "items": { - "$ref": "#/components/schemas/EntityRefs" - }, - "type": "array", - "title": "Entity Refs", - "description": "the binding of each entity of `restatement`, one per restatement.entities row, in row order, so a client can tell which node a text such as 'G7' bound. A response field kept off `restatement`, which posts back unchanged. The binding is the one the answer reads: for a candidates part, the elected reading's; for a part folded into an earlier part's spec, its own. [] when `restatement` is null or names no entity" - }, - "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, whole_total_read, whole_total_unpublished, 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" + "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 }, - "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" + "identity": { + "$ref": "#/components/schemas/BaseIdentity", + "description": "the identity to resolve and enumerate candidate options for" }, - "status": { - "type": "string", - "const": "no_data", - "title": "Status", - "description": "nothing to return" + "for": { + "$ref": "#/components/schemas/OptionsFor", + "description": "which resolved entity role to enumerate candidate options for" }, - "no_data": { - "$ref": "#/components/schemas/NoData", - "description": "the reason" + "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": [ - "status", - "no_data" + "identity", + "for" ], - "title": "NoDataPart", - "description": "Nothing could be returned for this part." + "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(...)})``." }, - "NodeRef": { + "OptionsResponse": { "properties": { - "ref": { - "type": "string", - "title": "Ref" + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1", + "default": 1 }, - "label": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Label" + "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": [ - "ref", - "label" + "diagnostics", + "for", + "options" ], - "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." + "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." }, - "NodesRequest": { + "OptionsSet": { "properties": { - "dcids": { + "items": { "items": { - "type": "string", - "maxLength": 512, - "pattern": "^[A-Za-z0-9_.\\-]+(?:/[A-Za-z0-9_.\\-]+)*$" + "$ref": "#/components/schemas/SlotOption" }, "type": "array", - "maxItems": 50, - "minItems": 1, - "title": "Dcids" + "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": [ - "dcids" + "items", + "truncated" ], - "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." + "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." }, - "NodesResponse": { + "OrganisationNode": { "properties": { - "nodes": { + "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": { - "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": "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": "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" + "type": "object", + "title": "Built From", + "description": "the build of each table the response read" }, - "status": { + "kind": { "type": "string", - "const": "not_held", - "title": "Status", - "default": "not_held" + "const": "organisation", + "title": "Kind", + "default": "organisation" + }, + "organisation": { + "$ref": "#/components/schemas/PartyBlock" } }, "type": "object", "required": [ "ref", - "status" + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind", + "organisation" ], - "title": "GraphNotHeldEntry", - "description": "A batch entry for a dcid where `GET /api/graph/node/{dcid}` answers 404\n`node_not_held`." + "title": "OrganisationNode" }, - "ObservationPoint": { + "OtherNode": { "properties": { - "date": { + "ref": { "type": "string", - "title": "Date", - "description": "the observation date, e.g. '2018'" + "title": "Ref", + "description": "the node's dcid" }, - "value": { + "label": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Value", - "description": "the observed value; null when the graph reports a date with no value" + "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" } }, - "additionalProperties": false, "type": "object", "required": [ - "date", - "value" + "ref", + "label", + "types", + "description", + "links", + "gaps", + "built_from", + "kind" ], - "title": "ObservationPoint", - "description": "One (date, value) pair from a resolved StatVar's observation series." + "title": "OtherNode", + "description": "A node no other kind fits. `types` and `description` carry what the graph holds." }, - "ObservationSeries": { + "OutputOptionsModel": { "properties": { - "stat_var": { - "$ref": "#/components/schemas/SeriesStatVarRef", - "description": "the StatVar these points observe" + "capability_version": { + "type": "string", + "title": "Capability Version" }, - "entities": { + "columns": { "items": { - "$ref": "#/components/schemas/SeriesEntityRef" + "$ref": "#/components/schemas/ColumnOptionModel" }, "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')" + "title": "Columns" }, - "axes": { + "formats": { "items": { - "$ref": "#/components/schemas/SeriesAxisRef" + "$ref": "#/components/schemas/FormatOptionModel" }, "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" + "title": "Formats" }, - "points": { + "bundle": { + "$ref": "#/components/schemas/BundleOptionModel" + }, + "enrichments": { "items": { - "$ref": "#/components/schemas/ObservationPoint" + "$ref": "#/components/schemas/EnrichmentOptionModel" }, "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)" + "title": "Enrichments" }, - "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" + "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}_kind for every role on a flow axis, the party's kind in words: official or private on the provider or creditor side, country or organisation on the recipient or debtor side, total, whole total (a total that holds every party of its group in that row's dataset and year) or unallocated. Naming one in columns gives the same column once" }, - "source_refs": { + "long_layout_totals": { "items": { - "$ref": "#/components/schemas/ProvenanceRef" + "type": "string" }, "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)" + "title": "Long Layout Totals", + "description": "the roles whose total rows ({role}_kind is total or whole total) a long-layout CSV or XLSX download keeps out of its main table. A private party stays in it. 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: the request's own words for it, which name resolution reads and a rendered sentence quotes" + }, + "name": { + "anyOf": [ + { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Name", + "description": "the entity's name, when its words (`text`) could name more than one entity and no `dcid` pins it: the row's identity, which keys its role and members within the part. Name resolution reads `text` with `name` beside it, as the raw-text door reads a query's words beside the name extraction gave them, so two rows whose words are alike stay two entities. Words that differ from `name` only in case read as `name`, and one `name` posted with two texts that differ beyond case in a part refuses `request_invalid`. Without it, `text` is the identity; a `name` equal to `text` is the field left out, and a `name` beside a `dcid` is invalid. A row no dcid pins whose identity, its `name` or else its `text`, is a dcid another row of the part pins refuses `request_invalid` at the row" + }, + "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" }, - "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" + "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. The dcid is the row's identity, so rows pinning one dcid under different texts are one entity, whose words are the first row's. A row no dcid pins whose `name`, or else `text`, is this dcid refuses request_invalid at that row." }, - "conversion": { + "members": { "anyOf": [ { - "$ref": "#/components/schemas/ObservationSeriesConversion" + "type": "boolean" }, { "type": "null" } ], - "description": "what recipe and tables converted this series' points to the requested currency; absent on a series served in its native facet" + "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 on each flow end its `role_text` gives, so one entity can be asked for as its members on one end and whole on the other; the same entity posted with both values on one end, or with both values and a row with no recognised `role_text`, refuses request_invalid" } }, "additionalProperties": false, "type": "object", "required": [ - "stat_var", - "entities", - "points", - "total_obs" + "text" ], - "title": "ObservationSeries", - "description": "One (stat_var, role tuple) pair's observation points, in chronological order." + "title": "ParsedEntity", + "description": "One entity mentioned in a parsed part, with an optional caller-supplied role hint." }, - "ObservationSeriesConversion": { + "ParsedInput": { "properties": { - "recipe_id": { + "kind": { "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" + "const": "parsed", + "title": "Kind", + "description": "discriminator for pre-parsed input", + "default": "parsed" }, - "exchange_rate_table_version": { - "type": "string", - "title": "Exchange Rate Table Version", - "description": "the exchange-rate table's own version" + "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." }, - "deflator_table_version": { + "raw_query": { "anyOf": [ { - "type": "string" + "type": "string", + "maxLength": 2000, + "minLength": 1 }, { "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" + "title": "Raw Query", + "description": "original query text, for echo only; does not affect resolution" }, - "projected_count": { - "type": "integer", - "title": "Projected Count", - "description": "rows whose rate/deflator term was sourced from a projected table row" + "user_message": { + "anyOf": [ + { + "type": "string", + "maxLength": 4000, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "User Message", + "description": "the user's own message for the turn, as written. On a request of one part, the scope words it states ('bilateral', 'excluding multilateral', 'net', 'gross', 'grant equivalent', 'commitments') become explicit scope entries and 'total' a total intent, read in place of the part's variable_text. A request of several parts reads each part's own variable_text, so one part's words never reach another. None reads the part's variable_text" }, - "projected_examples": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Projected Examples", - "description": "a capped, sorted sample of the affected 'entity@year' keys" + "carried_entries": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/Entry" + }, + "type": "array", + "maxItems": 16 + }, + { + "type": "null" + } + ], + "title": "Carried Entries", + "description": "the scope entries earlier searches of the conversation settled, each with provenance carried, from their resolved.scope_choices. Each attaches to the parts that settle its axis, and an entry made for a concept only to a part asking for that concept. An explicit entry on the same axis wins; a carried entry a part cannot take is reported in that part's resolved.scope_choices.dropped_entries. None carries none" } }, "additionalProperties": false, "type": "object", "required": [ - "recipe_id", - "table_provenance", - "exchange_rate_table_version", - "fallback_count", - "projected_count" + "parts" ], - "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." + "title": "ParsedInput", + "description": "Pre-parsed input: one or more variable parts supplied directly by the caller,\nskipping natural-language extraction." }, - "ObservationsOmission": { + "ParsedPart": { "properties": { - "reason": { + "variable_text": { "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" + "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": "Reason", - "description": "machine-readable cause, equal to the accompanying Warning's code when one fires" + "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" }, - "message": { - "type": "string", - "title": "Message", - "description": "human-readable explanation, safe to render directly" + "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" }, - "pairs": { + "unit_text": { "anyOf": [ { - "type": "integer" + "type": "string", + "maxLength": 100, + "minLength": 1 }, { "type": "null" } ], - "title": "Pairs", - "description": "observations_preview_too_large only: the count that was too large" + "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" }, - "cap": { + "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": "integer" + "type": "string", + "maxLength": 200, + "minLength": 1 }, { "type": "null" } ], - "title": "Cap", - "description": "observations_preview_too_large only: the ceiling it exceeded" + "title": "Source Text", + "description": "deprecated: post `sources` instead. Read as one included mention with this text, appended to `sources`" }, - "dispatched": { + "provenance": { "anyOf": [ { - "type": "integer" + "type": "string", + "maxLength": 200, + "minLength": 1 }, { "type": "null" } ], - "title": "Dispatched", - "description": "observations_no_points/observations_probe_failed/observations_no_matching_source/observations_timed_out: pairs actually dispatched" + "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" }, - "empty": { + "source_code": { "anyOf": [ { - "type": "integer" + "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": "Empty", - "description": "observations_no_points only: dispatched pairs that carried no data on their own facet" + "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" }, - "hard_failed": { + "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." + }, + "PartScope": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "the scope's id: the spec_id of `base`" + }, + "base": { + "$ref": "#/components/schemas/SpecDefinition", + "description": "the identity the part resolved; its bindings carry the constraints" + }, + "rule_version": { + "type": "string", + "title": "Rule Version", + "description": "the hash of the declaration tables compiled against" + }, + "entries": { + "items": { + "$ref": "#/components/schemas/Entry" + }, + "type": "array", + "title": "Entries", + "description": "the explicit and carried entries applied, the input a switch posts back" + }, + "dropped_entries": { + "items": { + "$ref": "#/components/schemas/DroppedEntry" + }, + "type": "array", + "title": "Dropped Entries", + "description": "the entries left out, each with its code and cause: carried entries the part cannot take, and on a fresh search the stated entries it cannot serve" + }, + "choices": { + "items": { + "$ref": "#/components/schemas/ScopeChoice" + }, + "type": "array", + "title": "Choices", + "description": "one per axis the part settles" + }, + "compiled": { + "$ref": "#/components/schemas/CompiledScope", + "description": "what the active options compile to" + }, + "ledger": { + "items": { + "$ref": "#/components/schemas/LedgerStep" + }, + "type": "array", + "title": "Ledger", + "description": "the switches made, newest last; the server keeps none, so [] on the wire" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "base", + "rule_version", + "entries", + "choices", + "compiled" + ], + "title": "PartScope", + "description": "Every scope choice of one part, the entries that settled them and the identity they\ncompile to." + }, + "PartyBlock": { + "properties": { + "roles": { "anyOf": [ { - "type": "integer" + "items": { + "type": "string" + }, + "type": "array" }, { "type": "null" } ], - "title": "Hard Failed", - "description": "observations_no_points (always 0) and observations_probe_failed: dispatched pairs whose fetch itself failed" + "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." + }, + "PartyTotalsLeftOutModel": { + "properties": { + "role": { + "type": "string", + "title": "Role", + "description": "the party role whose rows lost the totals" }, - "facet_rejected": { + "provenance": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "title": "Facet Rejected", - "description": "observations_no_points (always 0) and observations_no_matching_source: dispatched pairs a bound facet_filter rejected" + "title": "Provenance", + "description": "the dataset whose rows lost the totals, null for rows with no provenance. Absent on a version recorded before the trace named the provenance, whose totals left the rows of every dataset" + }, + "entities": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Entities", + "description": "the dcid refs of the totals left out, in ref order" } }, "additionalProperties": false, "type": "object", "required": [ - "reason", - "message" + "role", + "entities" ], - "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." + "title": "PartyTotalsLeftOutModel", + "description": "One role's group totals a `without_party_totals` cut left out of one provenance's rows\n(`datasets_api.party_totals.PartyTotalsCut.trace_entries`). An entry without a\n`provenance`, which a version recorded before the trace named the provenance holds, left its\nparties out of the rows of every dataset." }, - "OpenAxisValueCount": { + "PeriodCoverage": { "properties": { - "value": { - "$ref": "#/components/schemas/GraphRef", - "description": "the declared value" + "period": { + "type": "string", + "maxLength": 32, + "minLength": 1, + "title": "Period" }, - "count": { + "entities": { "type": "integer", - "title": "Count", - "description": "how many distinct served members declare this value" + "minimum": 0.0, + "title": "Entities" } }, "additionalProperties": false, "type": "object", "required": [ - "value", - "count" + "period", + "entities" ], - "title": "OpenAxisValueCount", - "description": "One declared value on an open constraint axis and how many served members\ndeclare it (see OpenConstraintAxisFact.values)." + "title": "PeriodCoverage", + "description": "How many entities one period's total covers." }, - "OpenConstraintAxisFact": { + "PinRequest": { "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": { + "schema_version": { "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" + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1", + "default": 1 }, - "undeclared_count": { + "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", - "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" + "const": 1, + "title": "Schema Version", + "default": 1 }, - "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" + "pinned": { + "$ref": "#/components/schemas/PinnedCoordinates" } }, "additionalProperties": false, "type": "object", "required": [ - "property", - "varies", - "distinct_count", - "undeclared_count" + "pinned" ], - "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." + "title": "PinResponse" }, - "Operation": { + "PinnedCoordinates": { "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": { + "id": { "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" + "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": [ - "verb", - "phrase" + "id", + "content_version", + "artifact_digest", + "pinned_at" ], - "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." + "title": "PinnedCoordinates" }, - "OperationEnvelope": { + "PivotOptionModel": { "properties": { - "operation_id": { + "index": { "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." + "title": "Index" }, - "status": { + "columns": { "type": "string", - "enum": [ - "pending", - "running", - "done", - "failed" - ], - "title": "Status" + "title": "Columns" }, - "poll": { + "state": { + "type": "string", + "title": "State" + }, + "reason": { "anyOf": [ { "type": "string" @@ -11650,272 +15392,147 @@ "type": "null" } ], - "title": "Poll" + "title": "Reason" }, - "retry_after_ms": { + "varying": { "anyOf": [ { - "type": "integer" + "items": { + "$ref": "#/components/schemas/VaryingColumnModel" + }, + "type": "array" }, { "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." + "title": "Varying" }, - "progress": { + "width": { "anyOf": [ { - "$ref": "#/components/schemas/OperationProgress" + "type": "integer" }, { "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" + ], + "title": "Width" }, - "manifest": { + "cells": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "integer" }, { "type": "null" } ], - "title": "Manifest" + "title": "Cells" }, - "error": { + "unavailable_formats": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "items": { + "$ref": "#/components/schemas/UnavailableFormatModel" + }, + "type": "array" }, { "type": "null" } ], - "title": "Error" + "title": "Unavailable Formats" } }, "additionalProperties": false, "type": "object", "required": [ - "operation" + "index", + "columns", + "state" ], - "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." + "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." }, - "OptionsEnvelope": { + "PivotOptions": { "properties": { - "schema_version": { - "type": "integer", - "title": "Schema Version", - "default": 1 - }, - "definition": { - "$ref": "#/components/schemas/DefinitionModel" - }, - "content_version": { + "index": { "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" + "minLength": 1, + "title": "Index" }, - "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": { + "columns": { "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 + "minLength": 1, + "title": "Columns" } }, "additionalProperties": false, "type": "object", "required": [ - "identity", - "for" + "index", + "columns" ], - "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(...)})``." + "title": "PivotOptions", + "description": "`options.pivot`: long-to-wide, `index` and `columns` each naming\nexactly one column." }, - "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" + "PlaceBlock": { + "properties": { + "contained_in": { + "items": { + "$ref": "#/components/schemas/NodeRef" + }, + "type": "array", + "title": "Contained In", + "description": "the containedInPlace targets" }, - "options": { - "$ref": "#/components/schemas/OptionsSet", - "description": "the enumerated candidate set" + "membership": { + "anyOf": [ + { + "$ref": "#/components/schemas/MembershipBlock" + }, + { + "type": "null" + } + ] } }, - "additionalProperties": false, "type": "object", "required": [ - "diagnostics", - "for", - "options" + "contained_in", + "membership" ], - "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." + "title": "GraphPlaceBlock", + "description": "A place's detail block. `membership` is set for a region the membership policy holds." }, - "OptionsSet": { + "PlaceCounts": { "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" + "publishers": { + "type": "integer", + "title": "Publishers", + "description": "distinct sources with data at the country" }, - "truncated": { - "type": "boolean", - "title": "Truncated", - "description": "true when items was capped before every candidate could be checked" + "variables": { + "type": "integer", + "title": "Variables", + "description": "distinct StatVars with data at the country" + }, + "aid": { + "$ref": "#/components/schemas/AidCounts" } }, "additionalProperties": false, "type": "object", "required": [ - "items", - "truncated" + "publishers", + "variables", + "aid" ], - "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." + "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." }, - "OrganisationNode": { + "PlaceOtherNode": { "properties": { "ref": { "type": "string", @@ -11999,12 +15616,12 @@ }, "kind": { "type": "string", - "const": "organisation", + "const": "place_other", "title": "Kind", - "default": "organisation" + "default": "place_other" }, - "organisation": { - "$ref": "#/components/schemas/PartyBlock" + "place_other": { + "$ref": "#/components/schemas/PlaceBlock" } }, "type": "object", @@ -12017,11 +15634,104 @@ "gaps", "built_from", "kind", - "organisation" + "place_other" ], - "title": "OrganisationNode" + "title": "PlaceOtherNode" }, - "OtherNode": { + "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", @@ -12105,9 +15815,12 @@ }, "kind": { "type": "string", - "const": "other", + "const": "provenance", "title": "Kind", - "default": "other" + "default": "provenance" + }, + "provenance": { + "$ref": "#/components/schemas/SourceBlock" } }, "type": "object", @@ -12116,353 +15829,286 @@ "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}_kind for every role on a flow axis, the party's kind in words: official or private on the provider or creditor side, country or organisation on the recipient or debtor side, total, whole total (a total that holds every party of its group in that row's dataset and year) or unallocated. 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}_kind is total or whole total) a long-layout CSV or XLSX download keeps out of its main table. A private party stays in it. 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" + "links", + "gaps", + "built_from", + "kind", + "provenance" ], - "title": "OutputOptionsModel", - "description": "The reshape options this frame supports, joined from its stored\n`materialise.profile.OutputProfile` and the current capability\ndocument." + "title": "ProvenanceNode" }, - "ParsedEntity": { + "ProvenanceRef": { "properties": { - "text": { + "ref": { "type": "string", - "maxLength": 128, - "minLength": 1, - "title": "Text", - "description": "the entity's text as the caller identified it: the request's own words for it, which name resolution reads and a rendered sentence quotes" + "title": "Ref", + "description": "the graph identifier" }, - "name": { - "anyOf": [ - { - "type": "string", - "maxLength": 128, - "minLength": 1 - }, - { - "type": "null" - } - ], - "title": "Name", - "description": "the entity's name, when its words (`text`) could name more than one entity and no `dcid` pins it: the row's identity, which keys its role and members within the part. Name resolution reads `text` with `name` beside it, as the raw-text door reads a query's words beside the name extraction gave them, so two rows whose words are alike stay two entities. Words that differ from `name` only in case read as `name`, and one `name` posted with two texts that differ beyond case in a part refuses `request_invalid`. Without it, `text` is the identity; a `name` equal to `text` is the field left out, and a `name` beside a `dcid` is invalid. A row no dcid pins whose identity, its `name` or else its `text`, is a dcid another row of the part pins refuses `request_invalid` at the row" + "label": { + "type": "string", + "title": "Label", + "description": "plain-language display name, read from the graph" }, - "role_text": { + "source": { "anyOf": [ { - "type": "string", - "maxLength": 64, - "minLength": 1 + "$ref": "#/components/schemas/SourceRef" }, { "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" + "description": "the organisation behind the provenance" }, - "dcid": { + "data_commons": { "anyOf": [ { - "type": "string", - "minLength": 1 + "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" }, { "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. The dcid is the row's identity, so rows pinning one dcid under different texts are one entity, whose words are the first row's. A row no dcid pins whose `name`, or else `text`, is this dcid refuses request_invalid at that row." + "description": "the Data Commons the provenance's data comes from" }, - "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 entity posted with both values refuses request_invalid" + "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": [ - "text" + "ref", + "label" ], - "title": "ParsedEntity", - "description": "One entity mentioned in a parsed part, with an optional caller-supplied role hint." + "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." }, - "ParsedInput": { + "ProviderBinding": { "properties": { "kind": { "type": "string", - "const": "parsed", + "const": "provider", "title": "Kind", - "description": "discriminator for pre-parsed input", - "default": "parsed" + "default": "provider" }, - "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." + "scope": { + "type": "string", + "enum": [ + "bilateral", + "inclusive", + "contributions", + "multilateral" + ], + "title": "Scope", + "description": "bilateral flows alone, with imputed shares of multilateral spending, with core contributions to multilaterals, or the core contributions alone, as a published donor total counts them" }, - "raw_query": { + "window": { "anyOf": [ { - "type": "string", - "maxLength": 2000, - "minLength": 1 + "prefixItems": [ + { + "type": "integer" + }, + { + "type": "integer" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 }, { "type": "null" } ], - "title": "Raw Query", - "description": "original query text, for echo only; does not affect resolution" + "title": "Window", + "description": "the years the option sets as the requested window, first and last: the latest run of years both tables of the inclusive scope cover, when they cover fewer than the part asks for, or the one latest year both cover for a part asking for the latest year; None when the option keeps the part's window" + }, + "provenance": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Provenance", + "description": "the composite provenance the inclusive scope binds as the identity's source, which stacks the part's bilateral flows on the imputed multilateral line of its own table; None for every other scope" } }, "additionalProperties": false, "type": "object", "required": [ - "parts" + "scope" ], - "title": "ParsedInput", - "description": "Pre-parsed input: one or more variable parts supplied directly by the caller,\nskipping natural-language extraction." + "title": "ProviderBinding", + "description": "An option that sets whose spending the answer counts." }, - "ParsedPart": { + "PublishFrameRequest": { "properties": { - "variable_text": { + "schema_version": { + "type": "integer", + "const": 1, + "title": "Schema Version", + "description": "contract schema version; exactly 1 for v1", + "default": 1 + }, + "spec_id": { "type": "string", - "maxLength": 200, - "minLength": 1, - "title": "Variable Text", - "description": "the variable's text as the caller identified it" + "pattern": "^ops_[0-9a-f]{6,64}$", + "title": "Spec Id", + "description": "the derived frame's own op-spec hash id, ops_-prefixed" }, - "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" + "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" }, - "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" + "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" }, - "unit_text": { - "anyOf": [ - { - "type": "string", - "maxLength": 100, - "minLength": 1 + "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": "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": "object", + "maxProperties": 22 }, "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" + "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" }, - "operations": { + "input_content_versions": { "items": { - "$ref": "#/components/schemas/Operation" + "type": "string", + "pattern": "^(?:cv_[0-9a-f]{32}|ocv_[0-9a-f]{6,64})$" }, "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" + "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" }, - "open_roles": { + "recipe": { "anyOf": [ { - "items": { - "type": "string", - "maxLength": 64, - "minLength": 1 - }, - "type": "array", - "maxItems": 2 + "$ref": "#/components/schemas/Recipe" }, { "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" + "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" }, - "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": { + "steps": { "anyOf": [ { "items": { - "type": "string" + "$ref": "#/components/schemas/Step" }, "type": "array" }, @@ -12470,64 +16116,22 @@ "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...'" + "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": [ - "artifact_digest" + "spec_id", + "content_version", + "role_keys", + "rows", + "input_content_versions" ], - "title": "PinRequest" + "title": "PublishFrameRequest" }, - "PinResponse": { + "PublishFrameResponse": { "properties": { "schema_version": { "type": "integer", @@ -12535,23 +16139,22 @@ "title": "Schema Version", "default": 1 }, - "pinned": { - "$ref": "#/components/schemas/PinnedCoordinates" + "published": { + "$ref": "#/components/schemas/PublishedFrameCoordinates" } }, "additionalProperties": false, "type": "object", "required": [ - "pinned" + "published" ], - "title": "PinResponse" + "title": "PublishFrameResponse" }, - "PinnedCoordinates": { + "PublishedFrameCoordinates": { "properties": { - "id": { + "spec_id": { "type": "string", - "title": "Id", - "description": "the spec_id from the path" + "title": "Spec Id" }, "content_version": { "type": "string", @@ -12561,1727 +16164,1686 @@ "type": "string", "title": "Artifact Digest" }, - "pinned_at": { - "type": "string", - "title": "Pinned At" + "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": [ - "id", + "spec_id", "content_version", "artifact_digest", - "pinned_at" + "created" ], - "title": "PinnedCoordinates" + "title": "PublishedFrameCoordinates" }, - "PivotOptionModel": { + "QueryEcho": { "properties": { - "index": { - "type": "string", - "title": "Index" - }, - "columns": { - "type": "string", - "title": "Columns" - }, - "state": { + "entry_path": { "type": "string", - "title": "State" - }, - "reason": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Reason" - }, - "varying": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/VaryingColumnModel" - }, - "type": "array" - }, - { - "type": "null" - } + "enum": [ + "raw_text", + "parsed", + "dataset_resubmit" ], - "title": "Varying" + "title": "Entry Path", + "description": "which input was used" }, - "width": { + "raw_query": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "title": "Width" + "title": "Raw Query", + "description": "the original query text, when one was supplied" }, - "cells": { + "normalized_query": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "title": "Cells" + "title": "Normalized Query", + "description": "normalised query text, when extraction ran" }, - "unavailable_formats": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/UnavailableFormatModel" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Unavailable Formats" + "extract_skipped": { + "type": "boolean", + "title": "Extract Skipped", + "description": "true when the extraction step was skipped for this request" } }, "additionalProperties": false, "type": "object", "required": [ - "index", - "columns", - "state" + "entry_path", + "extract_skipped" ], - "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." + "title": "QueryEcho", + "description": "What the response was understood to be answering." }, - "PivotOptions": { + "RawTextInput": { "properties": { - "index": { + "kind": { "type": "string", - "minLength": 1, - "title": "Index" + "const": "raw_text", + "title": "Kind", + "description": "discriminator for natural-language query input", + "default": "raw_text" }, - "columns": { + "query": { "type": "string", - "minLength": 1, - "title": "Columns" + "title": "Query", + "description": "the user's natural-language request" } }, "additionalProperties": false, "type": "object", "required": [ - "index", - "columns" + "query" ], - "title": "PivotOptions", - "description": "`options.pivot`: long-to-wide, `index` and `columns` each naming\nexactly one column." + "title": "RawTextInput", + "description": "Natural-language query input. The engine extracts, resolves, and grounds it." }, - "PlaceBlock": { + "Recipe": { "properties": { - "contained_in": { + "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/NodeRef" + "$ref": "#/components/schemas/JsonValue" }, "type": "array", - "title": "Contained In", - "description": "the containedInPlace targets" + "title": "Roots", + "description": "how each root dataset was minted, opaque here; analysis-mcp owns its shape" }, - "membership": { + "anchor": { "anyOf": [ { - "$ref": "#/components/schemas/MembershipBlock" + "$ref": "#/components/schemas/RecipeAnchor" }, { "type": "null" } - ] + ], + "description": "the rolling anchor, or null for a recipe with no rolling period" + }, + "left_out": { + "anyOf": [ + { + "$ref": "#/components/schemas/RecipeLeftOut" + }, + { + "type": "null" + } + ], + "description": "the series each step dropped for a data gap, as the run that stored the recipe computed them; null for a recipe stored without them" } }, + "additionalProperties": false, "type": "object", "required": [ - "contained_in", - "membership" + "schema_version", + "normal_form_hash", + "replay_key", + "execution_identity", + "tree", + "roots" ], - "title": "GraphPlaceBlock", - "description": "A place's detail block. `membership` is set for a region the membership policy holds." + "title": "Recipe" }, - "PlaceCounts": { + "RecipeAnchor": { "properties": { - "publishers": { - "type": "integer", - "title": "Publishers", - "description": "distinct sources with data at the country" + "period": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "title": "Period", + "description": "a period label at the frame's grain" }, - "variables": { - "type": "integer", - "title": "Variables", - "description": "distinct StatVars with data at the country" + "rule": { + "type": "string", + "const": "half1", + "title": "Rule", + "description": "the anchor rule: the newest period at least half of the series hold" }, - "aid": { - "$ref": "#/components/schemas/AidCounts" + "left_out": { + "items": { + "$ref": "#/components/schemas/RecipeLeftOutSeries" + }, + "type": "array", + "title": "Left Out" } }, "additionalProperties": false, "type": "object", "required": [ - "publishers", - "variables", - "aid" + "period", + "rule", + "left_out" ], - "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." + "title": "RecipeAnchor", + "description": "The period a rolling recipe's `latest` resolved to, and the series it left out." }, - "PlaceOtherNode": { + "RecipeDroppedSeries": { "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": { + "coordinates": { + "additionalProperties": { "type": "string" }, - "type": "array", - "title": "Types", - "description": "the node's typeOf values, as the graph holds them" + "type": "object", + "title": "Coordinates", + "description": "the series' dimension values, column name to value, as the step read them" }, - "description": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "step": { + "$ref": "#/components/schemas/RecipeStepRef" + }, + "side": { + "type": "string", + "enum": [ + "data", + "other" ], - "title": "Description", - "description": "the node's prose in the graph; null when it has none" + "title": "Side", + "description": "the step input the series came from, in the analysis call's words" }, - "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" + "reason": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "title": "Reason", + "description": "the engine's exclusion reason" }, - "gaps": { + "rows": { + "type": "integer", + "minimum": 1.0, + "title": "Rows", + "description": "the rows of the series the step left out" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "coordinates", + "step", + "side", + "reason", + "rows" + ], + "title": "RecipeDroppedSeries", + "description": "One series a step of the recipe dropped for missing or unusable data (a data gap, such\nas a growth endpoint the series lacks or a key the other side holds no partner for)." + }, + "RecipeLeftOut": { + "properties": { + "series": { "items": { - "type": "string" + "$ref": "#/components/schemas/RecipeDroppedSeries" }, "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" + "maxItems": 2000, + "title": "Series" }, - "place_other": { - "$ref": "#/components/schemas/PlaceBlock" + "complete": { + "type": "boolean", + "title": "Complete", + "description": "false when the steps dropped more series than listed" } }, + "additionalProperties": false, "type": "object", "required": [ - "ref", - "label", - "types", - "description", - "links", - "gaps", - "built_from", - "kind", - "place_other" + "series", + "complete" ], - "title": "PlaceOtherNode" + "title": "RecipeLeftOut", + "description": "Every series the recipe's steps dropped for a data gap, at most\n`MAX_RECIPE_LEFT_OUT_SERIES`, and whether that is all of them." }, - "PriceBasisWords": { + "RecipeLeftOutSeries": { "properties": { - "prices": { - "type": "string", - "enum": [ - "current", - "constant" - ], - "title": "Prices" + "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" }, - "base_year": { + "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": "integer" + "type": "string", + "maxLength": 1024, + "minLength": 1 }, { "type": "null" } ], - "title": "Base Year" + "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": [ - "prices", - "base_year" + "root", + "coordinates" ], - "title": "GraphPriceBasis", - "description": "Current or constant prices, with the base year of constant prices when known." + "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." }, - "Projection": { - "type": "string", - "enum": [ - "countries", - "other_states", - "territories", - "former_states", - "institutions" + "RecipeStepRef": { + "properties": { + "verb": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "title": "Verb" + }, + "node": { + "type": "integer", + "minimum": 0.0, + "title": "Node" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "verb", + "node" ], - "title": "Projection", - "description": "A named cut of a membership by member class." + "title": "RecipeStepRef", + "description": "A derived node of a recipe's `tree`: its verb and its index in depth-first order, the\ntree's top node first and each node before its inputs, slots in the tree's order." }, - "ProjectionCount": { + "RecipeWriteResponse": { "properties": { - "projection": { - "$ref": "#/components/schemas/Projection" + "spec_id": { + "type": "string", + "title": "Spec Id" }, - "count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Count", - "description": "members under the projection; null when the authority does not record it" + "content_version": { + "type": "string", + "title": "Content Version" }, - "complete": { + "created": { "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`)" + "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": [ - "projection", - "count", - "complete" + "spec_id", + "content_version", + "created" ], - "title": "GraphProjectionCount", - "description": "One projection of a membership and its member count at the block's date." + "title": "RecipeWriteResponse" }, - "ProvenanceEntry": { + "RefRoot": { "properties": { "ref": { - "type": "string", - "title": "Ref" - }, - "label": { - "type": "string", - "title": "Label" + "$ref": "#/components/schemas/_Ref" } }, + "additionalProperties": false, "type": "object", "required": [ - "ref", - "label" + "ref" ], - "title": "ProvenanceEntry", - "description": "One admitted provenance: its dcid and the provenance table's name for it." + "title": "RefRoot", + "description": "A DatasetRef, read as its one member." }, - "ProvenanceNode": { + "RefreshFrameRequest": { "properties": { - "ref": { + "spec_id": { "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" + "maxLength": 200, + "pattern": "^(?:spec|ops)_[^/\\s]+$", + "title": "Spec Id" }, - "kind": { + "content_version": { "type": "string", - "const": "provenance", - "title": "Kind", - "default": "provenance" + "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" }, - "provenance": { - "$ref": "#/components/schemas/SourceBlock" + "definition": { + "$ref": "#/components/schemas/CanonicalDefinition", + "description": "the canonical definition to register" } }, + "additionalProperties": false, "type": "object", "required": [ - "ref", - "label", - "types", - "description", - "links", - "gaps", - "built_from", - "kind", - "provenance" + "schema_version", + "definition" ], - "title": "ProvenanceNode" + "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." }, - "ProvenanceRef": { + "RelatedMeasure": { "properties": { - "ref": { - "type": "string", - "title": "Ref", - "description": "the graph identifier" + "stat_var": { + "$ref": "#/components/schemas/GraphRef", + "description": "the StatVar this measure reads, labelled with its graph name, or its dcid when it has none" }, - "label": { + "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", - "title": "Label", - "description": "plain-language display name, read from the graph" - }, - "source": { - "anyOf": [ - { - "$ref": "#/components/schemas/SourceRef" - }, - { - "type": "null" - } + "enum": [ + "what", + "how", + "where", + "when", + "source" ], - "description": "the organisation behind the provenance" + "title": "Axis", + "description": "the slot axis whose binding was relaxed" }, - "data_commons": { + "property_dcid": { "anyOf": [ { - "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" + "type": "string" }, { "type": "null" } ], - "description": "the Data Commons the provenance's data comes from" + "title": "Property Dcid", + "description": "the constraint property dcid the relaxed slot carried, when one exists" }, - "documentation": { - "type": "string", - "title": "Documentation", - "description": "the Graph API route of the provenance's document, GET /api/graph/documentation/{dcid}" + "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": [ - "ref", - "label" + "axis", + "dropped_value_dcids" ], - "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." + "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." }, - "PublishFrameRequest": { + "ReleaseDocumentResponse": { "properties": { + "catalog_version": { + "type": "string", + "title": "Catalog Version", + "description": "the catalogue release this deployment serves" + }, "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" + "description": "the envelope schema version this release resolves against" }, - "role_keys": { + "member_types": { "items": { - "type": "string", - "maxLength": 1024 + "type": "string" }, "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" + "title": "Member Types", + "description": "every component type this release's catalogue defines" }, - "rows": { + "constraint_ids": { "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": "string" }, "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" + "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" }, - "input_content_versions": { - "items": { - "type": "string", - "pattern": "^(?:cv_[0-9a-f]{32}|ocv_[0-9a-f]{6,64})$" + "component_schemas": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" }, - "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" + "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" }, - "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" + "intent_schemas_tolerant": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object", + "title": "Intent Schemas Tolerant", + "description": "each member type's own tolerant intent schema" }, - "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" + "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": [ - "spec_id", - "content_version", - "role_keys", - "rows", - "input_content_versions" + "catalog_version", + "schema_version", + "member_types", + "constraint_ids", + "retry_modes", + "envelope_schema", + "component_schemas", + "intent_schemas_tolerant", + "minimal_intents" ], - "title": "PublishFrameRequest" + "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." }, - "PublishFrameResponse": { + "ReleaseModel": { "properties": { - "schema_version": { - "type": "integer", - "const": 1, - "title": "Schema Version", - "default": 1 + "date": { + "type": "string", + "title": "Date", + "description": "the release date, YYYY-MM-DD" }, - "published": { - "$ref": "#/components/schemas/PublishedFrameCoordinates" + "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": [ - "published" + "date", + "title" ], - "title": "PublishFrameResponse" + "title": "ReleaseModel", + "description": "One release of a source's DFO pipeline." }, - "PublishedFrameCoordinates": { + "RenderBody": { "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)" + "frame": { + "$ref": "#/components/schemas/RenderFrame" } }, "additionalProperties": false, "type": "object", "required": [ - "spec_id", - "content_version", - "artifact_digest", - "created" + "frame" ], - "title": "PublishedFrameCoordinates" + "title": "RenderBody", + "description": "The frame to draw the revision on." }, - "QueryEcho": { + "RenderFrame": { "properties": { - "entry_path": { + "spec_id": { "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" + "title": "Spec Id" }, - "extract_skipped": { - "type": "boolean", - "title": "Extract Skipped", - "description": "true when the extraction step was skipped for this request" + "content_version": { + "type": "string", + "title": "Content Version" } }, "additionalProperties": false, "type": "object", "required": [ - "entry_path", - "extract_skipped" + "spec_id", + "content_version" ], - "title": "QueryEcho", - "description": "What the response was understood to be answering." + "title": "RenderFrame" }, - "RawTextInput": { + "ReplayedFrameResponse": { "properties": { - "kind": { + "spec_id": { "type": "string", - "const": "raw_text", - "title": "Kind", - "description": "discriminator for natural-language query input", - "default": "raw_text" + "title": "Spec Id" }, - "query": { + "content_version": { "type": "string", - "title": "Query", - "description": "the user's natural-language request" + "title": "Content Version" } }, "additionalProperties": false, "type": "object", "required": [ - "query" + "spec_id", + "content_version" ], - "title": "RawTextInput", - "description": "Natural-language query input. The engine extracts, resolves, and grounds it." + "title": "ReplayedFrameResponse" }, - "Recipe": { + "Resolution": { "properties": { "schema_version": { "type": "integer", "const": 1, "title": "Schema Version", - "description": "recipe schema version; exactly 1" + "description": "contract schema version; exactly 1 for v1. Required on every response.", + "default": 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" + "query_echo": { + "$ref": "#/components/schemas/QueryEcho", + "description": "what the response was understood to be answering" }, - "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" + "diagnostics": { + "$ref": "#/components/schemas/Diagnostics", + "description": "run health, warnings, timing, build stamp" }, - "execution_identity": { + "kind": { "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" + "const": "resolution", + "title": "Kind", + "description": "discriminator for a response that resolved the question into data", + "default": "resolution" }, - "roots": { + "parts": { "items": { - "$ref": "#/components/schemas/JsonValue" + "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", - "title": "Roots", - "description": "how each root dataset was minted, opaque here; analysis-mcp owns its shape" + "minItems": 1, + "title": "Parts", + "description": "one entry per variable asked, in query order" }, - "anchor": { + "rendered_sentence": { "anyOf": [ { - "$ref": "#/components/schemas/RecipeAnchor" + "type": "string" }, { "type": "null" } ], - "description": "the rolling anchor, or null for a recipe with no rolling period" + "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 } }, - "additionalProperties": false, "type": "object", "required": [ - "schema_version", - "normal_form_hash", - "replay_key", - "execution_identity", - "tree", - "roots" + "query_echo", + "diagnostics", + "parts", + "status", + "kind" ], - "title": "Recipe" + "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" }, - "RecipeAnchor": { + "ResolutionTrace": { "properties": { - "period": { - "type": "string", - "maxLength": 1024, - "minLength": 1, - "title": "Period", - "description": "a period label at the frame's grain" + "resolved_entities": { + "items": { + "$ref": "#/components/schemas/GraphRef" + }, + "type": "array", + "title": "Resolved Entities", + "description": "every entity" }, - "rule": { - "type": "string", - "const": "half1", - "title": "Rule", - "description": "the anchor rule: the newest period at least half of the series hold" + "resolved_sources": { + "items": { + "$ref": "#/components/schemas/ProvenanceRef" + }, + "type": "array", + "title": "Resolved Sources", + "description": "every dataset/source (a Data Commons provenance)" }, - "left_out": { + "slot_filters": { "items": { - "$ref": "#/components/schemas/RecipeLeftOutSeries" + "$ref": "#/components/schemas/ResolvedFilter" }, "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" + "title": "Slot Filters", + "description": "each applied bind decision, slot by slot" }, - "coordinates": { - "additionalProperties": { - "type": "string", - "maxLength": 1024, - "minLength": 1 + "query_qualifiers": { + "items": { + "$ref": "#/components/schemas/ResolvedQualifier" }, - "type": "object", - "title": "Coordinates", - "description": "the series' dimension values, column name to value. Holds `stat_var` or at least one entity-role column" + "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." }, - "label": { + "requested_window": { "anyOf": [ + { + "$ref": "#/components/schemas/TimeWindow" + }, { "type": "string", - "maxLength": 1024, - "minLength": 1 + "const": "latest" }, { "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" + "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." }, - "content_version": { - "type": "string", - "title": "Content Version" + "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." }, - "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" + "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" }, - "content_version": { - "type": "string", - "maxLength": 200, - "pattern": "^(?:cv|ocv)_[^/\\s]+$", - "title": "Content Version" + "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": [ - "spec_id", - "content_version" + "resolved_entities", + "resolved_sources", + "slot_filters" ], - "title": "RefreshFrameRequest", - "description": "The frame to refresh. An `ops_` id is accepted by the grammar and refused\n`frame_not_refreshable`." + "title": "ResolutionTrace", + "description": "Consolidated record of how the query was understood." }, - "RegisterRequest": { + "ResolveOptions": { "properties": { - "schema_version": { - "type": "integer", - "const": 1, - "title": "Schema Version", - "description": "contract schema version; exactly 1 for v1" + "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." }, - "definition": { - "$ref": "#/components/schemas/CanonicalDefinition", - "description": "the canonical definition to register" + "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", - "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." + "title": "ResolveOptions", + "description": "Optional resolution parameters the caller may supply." }, - "RelatedMeasure": { + "ResolveResponse": { "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}" + "results": { + "items": { + "$ref": "#/components/schemas/ResolveResult" + }, + "type": "array", + "title": "Results" } }, - "additionalProperties": false, "type": "object", "required": [ - "stat_var", - "definition" + "results" ], - "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." + "title": "GraphResolveResponse", + "description": "`results` is index-aligned with the request's `texts`." }, - "Relaxation": { + "ResolveResult": { "properties": { - "axis": { + "input": { + "type": "string", + "title": "Input" + }, + "status": { "type": "string", "enum": [ - "what", - "how", - "where", - "when", - "source" + "resolved", + "ambiguous", + "not_found", + "not_held" ], - "title": "Axis", - "description": "the slot axis whose binding was relaxed" + "title": "Status" }, - "property_dcid": { + "entity": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/EntityRef" }, { "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" + "matched": { + "anyOf": [ + { + "$ref": "#/components/schemas/Matched" + }, + { + "type": "null" + } + ] }, - "constraint_ids": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Constraint Ids", - "description": "every constraint id this release's registry enforces" + "reading": { + "anyOf": [ + { + "type": "string", + "enum": [ + "members", + "entity" + ] + }, + { + "type": "null" + } + ], + "title": "Reading" }, - "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`." + "projection": { + "anyOf": [ + { + "$ref": "#/components/schemas/Projection" + }, + { + "type": "null" + } + ] }, - "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" + "member_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Member Count" }, - "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" + "members": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "$ref": "#/components/schemas/NodeRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Members" }, - "intent_schemas_tolerant": { - "additionalProperties": { - "additionalProperties": true, - "type": "object" - }, - "type": "object", - "title": "Intent Schemas Tolerant", - "description": "each member type's own tolerant intent schema" + "candidates": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/EntityRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Candidates" }, - "minimal_intents": { - "additionalProperties": { - "additionalProperties": true, - "type": "object" - }, - "type": "object", - "title": "Minimal Intents", - "description": "each member type's own minimal legal intent" + "near_matches": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/EntityRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Near Matches" } }, - "additionalProperties": false, "type": "object", "required": [ - "catalog_version", - "schema_version", - "member_types", - "constraint_ids", - "retry_modes", - "envelope_schema", - "component_schemas", - "intent_schemas_tolerant", - "minimal_intents" + "input", + "status", + "entity", + "matched", + "reading", + "projection", + "member_count", + "members", + "candidates", + "near_matches" ], - "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." + "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. `near_matches` lists up to 3 other places or organisations of the\n requested kinds that share the name (\"Georgia\" resolves to the country, with the US\n state `geoId/13` here), else `null`. When `kinds` removed the first match, a node of a\n requested kind sharing the name resolves in its place and `near_matches` lists the\n removed match (\"Georgia\" with `kinds: [\"place_other\"]` resolves to `geoId/13`, with\n the country here).\n- `ambiguous`: `candidates`, in the resolver's order. When `kinds` removed the first\n match and up to 3 nodes of a requested kind share the name, `near_matches` lists the\n removed match, else `null`.\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`." }, - "ReleaseModel": { + "ResolvedEntity": { "properties": { - "date": { + "ref": { "type": "string", - "title": "Date", - "description": "the release date, YYYY-MM-DD" + "title": "Ref", + "description": "the resolved entity's dcid" }, - "title": { - "type": "string", - "title": "Title", - "description": "the release title, plain text" + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "plain-language display name" }, - "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" + "entity_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Entity Type", + "description": "e.g. Country, AdministrativeArea1, Organization" }, - "content_version": { - "type": "string", - "title": "Content Version" - } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "spec_id", - "content_version" - ], - "title": "RenderFrame" - }, - "ReplayedFrameResponse": { - "properties": { - "spec_id": { + "role": { "type": "string", - "title": "Spec Id" + "enum": [ + "observationAbout", + "origin", + "destination" + ], + "title": "Role", + "description": "the role key this entity plays; observationAbout, origin, or destination" }, - "content_version": { - "type": "string", - "title": "Content Version" + "multilateral": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Multilateral", + "description": "true for an origin entity that is a multilateral organisation, an official organisation such as IDA or the EU institutions, whose outflows spend the core contributions its funders made to it, so a donor total counting those contributions already holds them; absent for every other entity" + }, + "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": [ - "spec_id", - "content_version" + "ref", + "role" ], - "title": "ReplayedFrameResponse" + "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)." }, - "Resolution": { + "ResolvedFacet": { "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": { + "basis": { "type": "string", - "const": "resolution", - "title": "Kind", - "description": "discriminator for a response that resolved the question into data", - "default": "resolution" + "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" }, - "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" - } + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - }, - "type": "array", - "minItems": 1, - "title": "Parts", - "description": "one entry per variable asked, in query order" + ], + "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" }, - "rendered_sentence": { + "currency": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^[A-Z]{3}$" }, { "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)." + "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" }, - "sentence_plan": { + "source": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/SentenceToken" - }, - "type": "array" + "$ref": "#/components/schemas/SourceRef" }, { "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." + "description": "provenance axis only, alongside ref: the organisation behind the provenance, from the origin catalogue" }, - "skills": { + "data_commons": { "anyOf": [ { - "additionalProperties": { - "$ref": "#/components/schemas/Skill" - }, - "type": "object" + "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" }, { "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." + "description": "provenance axis only, alongside ref: the Data Commons the provenance's data comes from" }, - "requested_window": { + "documentation": { "anyOf": [ { - "$ref": "#/components/schemas/TimeWindow" - }, - { - "type": "string", - "const": "latest" + "type": "string" }, { "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." + "title": "Documentation", + "description": "provenance axis only, alongside ref: the Graph API route of the provenance's document, GET /api/graph/documentation/{dcid}" }, - "capability_version": { + "account": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/FlowAccount" }, { "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." + "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" }, - "default_reading": { + "selection": { "anyOf": [ { - "$ref": "#/components/schemas/TraceDefaultReading" + "type": "string", + "const": "per_series" }, { "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" + "title": "Selection", + "description": "'per_series' when the carried series select different values on this axis; present in place of ref/label, never alongside them" }, - "stated_form": { + "refs": { "anyOf": [ { - "type": "string", - "enum": [ - "per_person", - "per_head_base", - "per_area", - "rate", - "share" - ] + "items": { + "type": "string" + }, + "type": "array" }, { "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" + "title": "Refs", + "description": "unit axis only, alongside selection 'per_series': the distinct unit dcids the carried series select, in series order; a series selecting no unit adds none" }, - "conversion": { + "request_basis": { "anyOf": [ { - "$ref": "#/components/schemas/TraceConversion" + "additionalProperties": { + "type": "string", + "enum": [ + "bound", + "declared_default", + "fallback" + ] + }, + "type": "object" }, { "type": "null" } ], - "description": "always absent: conversion is recorded per series in resolved.observations.series[].conversion (see TraceConversion)" + "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": [ - "resolved_entities", - "resolved_sources", - "slot_filters" + "basis" ], - "title": "ResolutionTrace", - "description": "Consolidated record of how the query was understood." + "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, and\nthe two never appear together. On the unit axis, refs lists those units.\nrequest_basis joins either shape, present only on the unit axis, only\nwhen unit was bound through the request form (currency/prices/base_year),\none basis value per member the request named.\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." }, - "ResolveOptions": { + "ResolvedFilter": { "properties": { - "include_option_coverage": { + "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", + "declared_grouping" + ], + "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, a sector concept the text named bound its declared grouping of codes, 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, and every measure value it names that the answer does not carry; empty when none did" + }, + "slot": { "anyOf": [ { - "type": "boolean" + "type": "string" }, { "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." + "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 code row was named but no binding covers it, or a measure value was named that the answer does not carry; \"no_vocabulary\" when the term names neither" + }, + "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" }, - "include_observations": { + "evidence": { "anyOf": [ { - "type": "boolean" + "type": "string", + "enum": [ + "label", + "synonym", + "model", + "uncovered", + "unavailable", + "unsupported" + ] }, { "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." + "title": "Evidence", + "description": "what read the term: a code label or synonym, the bind model, \"uncovered\" for words no reader covers on the elected shape, unbound beside a recognised code or naming a measure value the answer does not carry, and no_vocabulary beside none when the binder rated them as not stated by its series, \"unavailable\" for a code no table holds, \"unsupported\" for a distinction no binding expresses" }, - "include_skills": { + "operation": { "anyOf": [ { - "type": "boolean" + "type": "string", + "enum": [ + "union", + "refinement" + ] }, { "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." + "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", - "title": "ResolveOptions", - "description": "Optional resolution parameters the caller may supply." + "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, and every measure value it names that the\nanswer does not carry (a dcid of the index's measure values, such as\n`amountMobilised`);\nempty when the text names neither (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 code row was named but\nno binding covers it or a measure value was named that the answer does not\ncarry, and `\"no_vocabulary\"` when the term names neither: an LLM-reported\nphrase (`bind`'s own `unplaced` output) that no taxonomy in this\ndeployment's index can express, an exclusion or comparison phrase\n(`\"unsupported\"`), or words beside no code the binder rated as not stated\non the elected shape (`\"uncovered\"`).\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 on the elected shape\n (`phase_rank_bind._coverage_records`). Beside a recognised code they are recorded\n `\"unbound\"` with that code's rows as `named`. On a shape the measure index describes,\n a word that every name of a measure value's reading holds names that value when no\n span names it and the answer does not carry it, and its record adds the value to\n `named`. Beside no code such a word is recorded `\"unbound\"` naming the value, whatever\n the binder rates it; \"mobilised\" names `amountMobilised` on an amount series. Other\n words beside no code are recorded `\"no_vocabulary\"` with `named` empty when the\n binder rates them below `SearchSettings.stated_word_bar` as not stated by the shape's\n series; a word it rates at the bar or above, or leaves unrated, reads as stated.\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." }, - "ResolveResponse": { + "ResolvedScope": { "properties": { - "results": { + "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/ResolveResult" + "$ref": "#/components/schemas/ResolvedEntity" }, "type": "array", - "title": "Results" + "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": [ - "results" + "axis", + "members" ], - "title": "GraphResolveResponse", - "description": "`results` is index-aligned with the request's `texts`." + "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." }, - "ResolveResult": { + "ResolvedSpec": { "properties": { - "input": { - "type": "string", - "title": "Input" + "shape": { + "$ref": "#/components/schemas/Shape", + "description": "the structural family chosen" }, - "status": { - "type": "string", - "enum": [ - "resolved", - "ambiguous", - "not_found", - "not_held" - ], - "title": "Status" + "slots": { + "items": { + "$ref": "#/components/schemas/Slot" + }, + "type": "array", + "title": "Slots", + "description": "one entry per slot the shape defines, each in a binding state. Its what/how entries are the identity's slots, so a what/how property it leaves out is one no served member asserts" }, - "entity": { + "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": [ { - "$ref": "#/components/schemas/EntityRef" + "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" }, - "matched": { - "anyOf": [ + "coverage": { + "oneOf": [ { - "$ref": "#/components/schemas/Matched" + "$ref": "#/components/schemas/CoverageExact" }, { - "type": "null" - } - ] - }, - "reading": { - "anyOf": [ - { - "type": "string", - "enum": [ - "members", - "entity" - ] + "$ref": "#/components/schemas/CoverageBreadth" }, { - "type": "null" + "$ref": "#/components/schemas/CoverageBare" } ], - "title": "Reading" + "title": "Coverage", + "description": "observation footprint", + "discriminator": { + "propertyName": "kind", + "mapping": { + "bare": "#/components/schemas/CoverageBare", + "breadth": "#/components/schemas/CoverageBreadth", + "exact": "#/components/schemas/CoverageExact" + } + } }, - "projection": { + "headline": { "anyOf": [ { - "$ref": "#/components/schemas/Projection" + "$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" }, - "member_count": { + "download": { "anyOf": [ { - "type": "integer" + "$ref": "#/components/schemas/DownloadFacts" }, { "type": "null" } ], - "title": "Member Count" + "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" }, - "members": { + "coverage_stamp": { "anyOf": [ { "type": "string" }, - { - "items": { - "$ref": "#/components/schemas/NodeRef" - }, - "type": "array" - }, { "type": "null" } ], - "title": "Members" + "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" }, - "candidates": { + "scope": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/EntityRef" - }, - "type": "array" + "$ref": "#/components/schemas/ResolvedScope" }, { "type": "null" } ], - "title": "Candidates" + "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" }, - "near_matches": { + "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": [ { - "items": { - "$ref": "#/components/schemas/EntityRef" - }, - "type": "array" + "$ref": "#/components/schemas/SpecObservations" }, { "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. `near_matches` lists up to 3 other places or organisations of the\n requested kinds that share the name (\"Georgia\" resolves to the country, with the US\n state `geoId/13` here), else `null`. When `kinds` removed the first match, a node of a\n requested kind sharing the name resolves in its place and `near_matches` lists the\n removed match (\"Georgia\" with `kinds: [\"place_other\"]` resolves to `geoId/13`, with\n the country here).\n- `ambiguous`: `candidates`, in the resolver's order. When `kinds` removed the first\n match and up to 3 nodes of a requested kind share the name, `near_matches` lists the\n removed match, else `null`.\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" + "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." }, - "label": { + "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" @@ -14290,30 +17852,27 @@ "type": "null" } ], - "title": "Label", - "description": "plain-language display name" + "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)" }, - "entity_type": { + "sentence_plan": { "anyOf": [ { - "type": "string" + "items": { + "$ref": "#/components/schemas/SentenceToken" + }, + "type": "array" }, { "type": "null" } ], - "title": "Entity Type", - "description": "e.g. Country, AdministrativeArea1, Organization" + "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'" }, - "role": { - "type": "string", - "enum": [ - "observationAbout", - "origin", - "destination" - ], - "title": "Role", - "description": "the role key this entity plays; observationAbout, origin, or destination" + "trace": { + "$ref": "#/components/schemas/ResolutionTrace", + "description": "consolidated record of how the query was understood" }, "confidence": { "anyOf": [ @@ -14330,90 +17889,113 @@ } ], "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": { + "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": { - "type": "string", - "enum": [ - "bound", - "declared_default", - "fallback" + "anyOf": [ + { + "type": "string", + "enum": [ + "structural", + "nominated", + "twin", + "direction", + "breakdown" + ] + }, + { + "type": "null" + } ], "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" + "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; 'breakdown', the same measure broken down by another set of slots, offered when its family holds no total and the request names no breakdown that serves a member. The elected reading, listed first, carries none. None on a definite answer and on every Spec outside CandidateSet.specs." }, - "ref": { + "available_at_place": { "anyOf": [ { - "type": "string" + "type": "boolean" }, { "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'" + "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." }, - "label": { + "equivalent_readings": { "anyOf": [ { - "type": "string" + "items": { + "$ref": "#/components/schemas/Spec" + }, + "type": "array" }, { "type": "null" } ], - "title": "Label", - "description": "best-effort display label for ref; present only alongside ref" + "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." }, - "currency": { + "skills": { "anyOf": [ { - "type": "string", - "pattern": "^[A-Z]{3}$" + "items": { + "type": "string" + }, + "type": "array" }, { "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" + "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." }, - "source": { + "alternative_measures": { "anyOf": [ { - "$ref": "#/components/schemas/SourceRef" + "items": { + "$ref": "#/components/schemas/SpecAlternativeMeasure" + }, + "type": "array" }, { "type": "null" } ], - "description": "provenance axis only, alongside ref: the organisation behind the provenance, from the origin catalogue" + "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." }, - "data_commons": { + "measure_label": { "anyOf": [ { - "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" + "type": "string" }, { "type": "null" } ], - "description": "provenance axis only, alongside ref: the Data Commons the provenance's data comes from" + "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" }, - "documentation": { + "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." + }, + "concept_label": { "anyOf": [ { "type": "string" @@ -14422,296 +18004,305 @@ "type": "null" } ], - "title": "Documentation", - "description": "provenance axis only, alongside ref: the Graph API route of the provenance's document, GET /api/graph/documentation/{dcid}" + "title": "Concept Label", + "description": "what this Spec's series count, in a reader's words, with no measure basis, codes, provider scope or dataset: the sector the identity binds where it binds one ('health' for CRS 120 and 130 together, ONE's grouping; 'basic health' for CRS 122), else the values the served members share outside the measure axes, which shape.label states in brackets after measure_label ('official development assistance'). A composite carries its table identity's concept label. None when the shape has no measure partition and binds no sector. Never a member of BaseIdentity, never hashed." }, - "account": { + "published_tables": { "anyOf": [ { - "$ref": "#/components/schemas/FlowAccount" + "type": "string" }, { "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" + "title": "Published Tables", + "description": "the names of the tables this Spec's figures are published in, with no provider scope: the elected dataset's label ('OECD Creditor Reporting System (CRS)'), or for a composite the labels of the tables its components read, joined ('OECD Creditor Reporting System (CRS) and ONE Imputed Multilateral Sectors'). None when no provenance was elected. Never a member of BaseIdentity, never hashed." }, - "selection": { + "related_group": { "anyOf": [ { - "type": "string", - "const": "per_series" + "$ref": "#/components/schemas/GraphRef" }, { "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" + "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 []" }, - "request_basis": { + "related_measures": { "anyOf": [ { - "additionalProperties": { - "type": "string", - "enum": [ - "bound", - "declared_default", - "fallback" - ] + "items": { + "$ref": "#/components/schemas/RelatedMeasure" }, - "type": "object" + "type": "array" }, { "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)" + "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." }, - "provenance": { - "type": "string", - "enum": [ - "binder", - "text_recognized", - "measure_elected", - "declared_default" + "open_axis_facts": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/OpenConstraintAxisFact" + }, + "type": "array" + }, + { + "type": "null" + } ], - "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, and every measure value it names that the answer does not carry; empty when none did" + "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." }, - "slot": { + "role_axis_facts": { "anyOf": [ { - "type": "string" + "items": { + "$ref": "#/components/schemas/RoleAxisFact" + }, + "type": "array" }, { "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 code row was named but no binding covers it, or a measure value was named that the answer does not carry; \"no_vocabulary\" when the term names neither" + "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." }, - "start": { + "unit_conversion": { "anyOf": [ { - "type": "integer" + "$ref": "#/components/schemas/UnitConversion" }, { "type": "null" } ], - "title": "Start", - "description": "character offset where the term starts in the variable phrase" + "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." }, - "end": { + "scope_choices": { "anyOf": [ { - "type": "integer" + "$ref": "#/components/schemas/PartScope" }, { "type": "null" } ], - "title": "End", - "description": "character offset where the term ends in the variable phrase" + "description": "how the part this Spec answers was counted: one ScopeChoice per axis a declared rule or the request settled (sector, region, measure basis, provider scope), with its options and their availability, the explicit and carried entries applied, and the identity they compile to (see PartScope). To switch an option, post base.identity as identity on a dataset_resubmit identity entry, with entries as scope_entries, the entry on the switched axis replaced by the switch: one entry per axis. None when no axis was settled and no scope entries were posted. 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" }, - "evidence": { + "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": "string", - "enum": [ - "label", - "synonym", - "model", - "uncovered", - "unavailable", - "unsupported" - ] + "type": "integer" }, { "type": "null" } ], - "title": "Evidence", - "description": "what read the term: a code label or synonym, the bind model, \"uncovered\" for words no reader covers on the elected shape, unbound beside a recognised code or naming a measure value the answer does not carry, and no_vocabulary beside none when the binder rated them as not stated by its series, \"unavailable\" for a code no table holds, \"unsupported\" for a distinction no binding expresses" + "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" }, - "operation": { + "data_date_range": { "anyOf": [ { - "type": "string", - "enum": [ - "union", - "refinement" - ] + "$ref": "#/components/schemas/DateRange" }, { "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" + "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" }, - "selected": { + "source_codes": { "items": { - "$ref": "#/components/schemas/GraphRef" + "$ref": "#/components/schemas/SourceCode" }, "type": "array", - "title": "Selected", - "description": "the codes the term asked for before the combination simplified them" + "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": [ - "text", - "named", - "disposition" + "member_count" ], - "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, and every measure value it names that the\nanswer does not carry (a dcid of the index's measure values, such as\n`amountMobilised`);\nempty when the text names neither (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 code row was named but\nno binding covers it or a measure value was named that the answer does not\ncarry, and `\"no_vocabulary\"` when the term names neither: an LLM-reported\nphrase (`bind`'s own `unplaced` output) that no taxonomy in this\ndeployment's index can express, an exclusion or comparison phrase\n(`\"unsupported\"`), or words beside no code the binder rated as not stated\non the elected shape (`\"uncovered\"`).\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 on the elected shape\n (`phase_rank_bind._coverage_records`). Beside a recognised code they are recorded\n `\"unbound\"` with that code's rows as `named`. On a shape the measure index describes,\n a word that every name of a measure value's reading holds names that value when no\n span names it and the answer does not carry it, and its record adds the value to\n `named`. Beside no code such a word is recorded `\"unbound\"` naming the value, whatever\n the binder rates it; \"mobilised\" names `amountMobilised` on an amount series. Other\n words beside no code are recorded `\"no_vocabulary\"` with `named` empty when the\n binder rates them below `SearchSettings.stated_word_bar` as not stated by the shape's\n series; a word it rates at the bar or above, or leaves unrated, reads as stated.\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." + "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." }, - "ResolvedScope": { + "ResubmitCandidate": { "properties": { - "axis": { - "type": "string", - "enum": [ - "observationAbout", - "origin", - "destination" + "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": "Axis", - "description": "the role-keyed axis the request left unnamed and the engine defaulted" + "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" }, - "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" + "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": [ - "axis", - "members" + "identity" ], - "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." + "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." }, - "ResolvedSpec": { + "ResubmitCandidatesEntry": { "properties": { - "shape": { - "$ref": "#/components/schemas/Shape", - "description": "the structural family chosen" + "entry_kind": { + "type": "string", + "const": "candidates", + "title": "Entry Kind", + "description": "discriminator for a candidate-set dataset_resubmit entry", + "default": "candidates" }, - "slots": { - "items": { - "$ref": "#/components/schemas/Slot" - }, - "type": "array", - "title": "Slots", - "description": "one entry per slot the shape defines, each in a binding state. Its what/how entries are the identity's slots, so a what/how property it leaves out is one no served member asserts" + "variable_text": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "title": "Variable Text", + "description": "this part's variable text, echoed back onto the rebuilt part" }, - "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." + "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" }, - "unresolved_slots": { + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "echoed back verbatim onto the rebuilt candidates part -- see CandidateSet.truncated for what this flags" + }, + "candidates": { "items": { - "type": "string" + "$ref": "#/components/schemas/ResubmitCandidate" }, "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." + "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" }, - "stat_vars": { - "$ref": "#/components/schemas/ResolvedStatVars", - "description": "resolved StatVar(s) inside the region, and the scope they were drawn from" + "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 }, - "entities": { + "operations": { "items": { - "$ref": "#/components/schemas/ResolvedEntity" + "$ref": "#/components/schemas/Operation" }, "type": "array", - "title": "Entities", - "description": "resolved entities the data is about; may be empty if where is unbound" + "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": [ @@ -14719,6 +18310,13 @@ "additionalProperties": { "$ref": "#/components/schemas/EntityGroup" }, + "propertyNames": { + "enum": [ + "observationAbout", + "origin", + "destination" + ] + }, "type": "object" }, { @@ -14726,692 +18324,818 @@ } ], "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" + "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" }, - "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" - } - } + "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 }, - "headline": { + "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": [ { - "$ref": "#/components/schemas/Headline" + "items": { + "$ref": "#/components/schemas/Assumption" + }, + "type": "array", + "maxItems": 67 }, { "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" + "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" }, - "download": { + "scope_entries": { "anyOf": [ { - "$ref": "#/components/schemas/DownloadFacts" + "items": { + "$ref": "#/components/schemas/Entry" + }, + "type": "array", + "maxItems": 16 }, { "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" + "title": "Scope Entries", + "description": "the part's explicit and carried scope entries, one per axis: the entries of its resolved.scope_choices, with the entry on a switched axis replaced by the switch, an explicit entry whose origin names the choice, posted with that scope's base.identity as identity. An entry posted with no concept on an axis asked for a concept takes that concept, which the response's entries echo. The engine compiles them over identity and resolves the result, whose resolved.scope_choices states every choice, the entries applied and the carried entries left out. Refuses requested_option_unavailable (422) for an explicit entry this part cannot serve and conflicting_requested_options (422) for two that cannot hold together. None, the default, resolves identity as posted" + } + }, + "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" }, - "coverage_stamp": { + "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" + "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", + "timed_out" + ] }, { "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" + "title": "Reason", + "description": "the NoData.reason to restate onto the rebuilt part; required when status is no_data, refused when status is unsupported" }, - "scope": { + "code": { "anyOf": [ { - "$ref": "#/components/schemas/ResolvedScope" + "type": "string" }, { "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" + "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" }, - "facets": { - "additionalProperties": { - "$ref": "#/components/schemas/ResolvedFacet" + "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": "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" + "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" }, - "observations": { + "held_until": { "anyOf": [ { - "$ref": "#/components/schemas/SpecObservations" + "type": "string", + "format": "date-time" }, { "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." + "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" }, - "rendered_sentence": { + "member_count": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "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)" + "title": "Member Count", + "description": "how many entities this axis' open scope resolves to, leaving out the group totals the code index declares beside their members (party_kind total), as the default download leaves them out; a scope of totals alone counts them all. 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" }, - "sentence_plan": { + "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" + }, + "holds_multilaterals": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/SentenceToken" - }, - "type": "array" + "type": "boolean" }, { "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" + "title": "Holds Multilaterals", + "description": "for the origin axis, whether its open population holds a multilateral organisation (see ResolvedEntity.multilateral), read from the member list where it is known and otherwise from the parties the served datasets publish on the axis: true for the CRS's donors. Absent for the destination axis" + } + }, + "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" }, - "confidence": { + "label": { "anyOf": [ { - "type": "string", - "enum": [ - "high", - "medium", - "low" - ] + "type": "string" }, { "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." + "title": "Label" }, - "basis": { + "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." + }, + "RootRendering": { + "properties": { + "without_party_totals": { + "type": "boolean", + "title": "Without Party Totals", + "default": false + }, + "columns": { "anyOf": [ { - "type": "string", - "enum": [ - "structural", - "nominated", - "twin", - "direction", - "breakdown" - ] + "items": { + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + "type": "array", + "maxItems": 32 }, { "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; 'breakdown', the same measure broken down by another set of slots, offered when its family holds no total and the request names no breakdown that serves a member. The elected reading, listed first, carries none. None on a definite answer and on every Spec outside CandidateSet.specs." + "title": "Columns" }, - "available_at_place": { + "groupby": { "anyOf": [ { - "type": "boolean" + "$ref": "#/components/schemas/GroupbyOptions" }, { "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." + ] + } + }, + "additionalProperties": false, + "type": "object", + "title": "RootRendering", + "description": "How a dataset root's frame is read. `columns` left out takes the enrichment its\ndataset's roles need (`default_enrichment`); `[]` reads the stored frame\nalone. `groupby` reads the frame summed as a mint with that `options.groupby` sums it." + }, + "Roots": { + "properties": { + "code_systems": { + "items": { + "$ref": "#/components/schemas/RootEntry" + }, + "type": "array", + "title": "Code Systems" }, - "equivalent_readings": { + "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": [ { - "items": { - "$ref": "#/components/schemas/Spec" - }, - "type": "array" + "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": "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." + "title": "Window", + "description": "the years to serve. Replaces the spec's window whole" }, - "skills": { + "entities": { "anyOf": [ { - "items": { - "type": "string" + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": "array" + "type": "object" }, { "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." + "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" }, - "alternative_measures": { + "facets": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/SpecAlternativeMeasure" + "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": "array" + "type": "object" }, { "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": { + "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": [ { - "type": "string" + "$ref": "#/components/schemas/GraphRef" }, { "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": { + "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": "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." + "title": "Countries" }, - "related_group": { + "years_covered": { "anyOf": [ { - "$ref": "#/components/schemas/GraphRef" + "type": "string" }, { "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 []" + "title": "Years Covered" }, - "related_measures": { + "granularity": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/RelatedMeasure" - }, - "type": "array" + "type": "string" }, { "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." + "title": "Granularity" }, - "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." + "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." + }, + "ScopeChoice": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "':'" }, - "role_axis_facts": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/RoleAxisFact" - }, - "type": "array" - }, - { - "type": "null" - } + "axis": { + "type": "string", + "enum": [ + "sector", + "region", + "measure_basis", + "provider" ], - "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." + "title": "Axis", + "description": "the axis" }, - "unit_conversion": { - "anyOf": [ - { - "$ref": "#/components/schemas/UnitConversion" - }, - { - "type": "null" - } + "rule": { + "type": "string", + "title": "Rule", + "description": "the declared rule that settled the axis" + }, + "provenance": { + "type": "string", + "enum": [ + "explicit", + "carried", + "default" ], - "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." + "title": "Provenance", + "description": "what settled the active option" + }, + "active": { + "type": "string", + "maxLength": 128, + "pattern": "^(sector|region|measure_basis|provider):[A-Za-z0-9_+]+$", + "title": "Active", + "description": "the option the compiled identity holds" + }, + "options": { + "items": { + "$ref": "#/components/schemas/Option" + }, + "type": "array", + "minItems": 1, + "title": "Options", + "description": "every option, in declared order" } }, "additionalProperties": false, "type": "object", "required": [ - "shape", - "slots", - "stat_vars", - "entities", - "coverage", - "trace" + "id", + "axis", + "rule", + "provenance", + "active", + "options" ], - "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." + "title": "ScopeChoice", + "description": "How one axis of the part was counted, and the options it could take." }, - "ResolvedStatVars": { + "SentenceToken": { "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" + "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." }, - "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 + "text": { + "type": "string", + "title": "Text", + "description": "the rendered text for this token; empty string for a slot with nothing bound" }, - "served_count": { + "axis": { "anyOf": [ { - "type": "integer" + "type": "string", + "enum": [ + "what", + "how", + "where", + "when", + "source", + "unit", + "method" + ] }, { "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" + "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'" }, - "data_date_range": { + "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": [ { - "$ref": "#/components/schemas/DateRange" + "type": "string" }, { "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" + "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)." }, - "entity_groups": { + "role": { "anyOf": [ { - "additionalProperties": { - "$ref": "#/components/schemas/EntityGroup" - }, - "propertyNames": { - "enum": [ - "observationAbout", - "origin", - "destination" - ] - }, - "type": "object" + "$ref": "#/components/schemas/RoleAxis" }, { "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" + "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 i its entity_choice names. The client titles that wording's candidate menu by this role and posts the pick's entry of NoData.options." }, - "assumptions": { + "entity_choice": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/Assumption" - }, - "type": "array", - "maxItems": 67 + "type": "integer", + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Entity Choice", + "description": "on the slot token an entity_ambiguous no_data plan marks for an ambiguous wording, the index into NoData.ambiguous_entities of the group it asks, on the part its part_index names in an envelope plan. The NoData.options with the same entity_choice form that slot's menu. Null on every other token" + }, + "binding_ref": { + "anyOf": [ + { + "type": "string" }, { "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" + "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." }, - "candidates": { + "entity_refs": { "items": { - "$ref": "#/components/schemas/ResubmitCandidate" + "type": "string" }, "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 + "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." }, - "operations": { + "states": { "items": { - "$ref": "#/components/schemas/Operation" + "type": "string" }, "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" + "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" }, - "entity_groups": { + "distinguishes": { "anyOf": [ { - "additionalProperties": { - "$ref": "#/components/schemas/EntityGroup" - }, - "propertyNames": { - "enum": [ - "observationAbout", - "origin", - "destination" - ] - }, - "type": "object" + "type": "boolean" }, { "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" + "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" }, - "assumptions": { + "part_index": { "anyOf": [ { - "items": { - "$ref": "#/components/schemas/Assumption" - }, - "type": "array", - "maxItems": 67 + "type": "integer" }, { "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" + "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": [ - "part" + "kind", + "text" ], - "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." + "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." }, - "ResubmitPlaceholderEntry": { + "Series": { "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" + "measurement_method": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeRef" + }, + { + "type": "null" + } + ], + "description": "null when no facet states a method: no stated method" }, - "status": { - "type": "string", - "enum": [ - "no_data", - "unsupported" + "observation_period": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } ], - "title": "Status", - "description": "which stub outcome to restate for this part" + "title": "Observation Period" }, - "reason": { + "scaling": { "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", - "timed_out" - ] + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Scaling" + }, + "first_year": { + "anyOf": [ + { + "type": "string" }, { "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" + "title": "First Year" }, - "code": { + "last_year": { "anyOf": [ { "type": "string" @@ -15420,109 +19144,112 @@ "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" + "title": "Last Year" }, - "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 + "places": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Places", + "description": "null for a role-bearing variable" }, - "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" + "observations": { + "type": "integer", + "title": "Observations" + }, + "units": { + "$ref": "#/components/schemas/UnitsFold" + }, + "binding": { + "$ref": "#/components/schemas/Binding" } }, - "additionalProperties": false, "type": "object", "required": [ - "variable_text", - "status" + "measurement_method", + "observation_period", + "scaling", + "first_year", + "last_year", + "places", + "observations", + "units", + "binding" ], - "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." + "title": "GraphAvailabilitySeries", + "description": "A source's facets sharing a measurement method, period and scaling." }, - "RetentionModel": { + "SeriesAxisRef": { "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" + "property": { + "type": "string", + "title": "Property", + "description": "the constraint property's dcid, e.g. 'crsPurpose'" }, - "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" + "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": [ - "pinned" + "property", + "ref", + "label" ], - "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" - ] + "title": "SeriesAxisRef", + "description": "One constraint of a series' StatVar (see ObservationSeries.axes)." }, - "RoleAxisFact": { + "SeriesConversionFallbackExample": { "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, leaving out the group totals the code index declares beside their members (party_kind total), as the default download leaves them out; a scope of totals alone counts them all. 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" + "entity": { + "type": "string", + "title": "Entity", + "description": "the entity dcid absent from the deflator table" }, - "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" + "fallback_entity": { + "type": "string", + "title": "Fallback Entity", + "description": "the recipe's fallback entity substituted for it" } }, "additionalProperties": false, "type": "object", "required": [ - "role", - "member_count", - "members_available" + "entity", + "fallback_entity" ], - "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." + "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)." }, - "RootEntry": { + "SeriesEntityRef": { "properties": { + "role": { + "type": "string", + "enum": [ + "observationAbout", + "origin", + "destination" + ], + "title": "Role", + "description": "observationAbout, origin, or destination" + }, "ref": { "type": "string", - "title": "Ref" + "title": "Ref", + "description": "the entity's dcid" }, "label": { "anyOf": [ @@ -15533,205 +19260,106 @@ "type": "null" } ], - "title": "Label" + "title": "Label", + "description": "best-effort display label for ref; None when unresolved, never fabricated" }, - "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" + "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": [ - "ref", - "label", - "count" + "role", + "ref" ], - "title": "GraphRootEntry", - "description": "A place to start listing from, with the length of its list." + "title": "SeriesEntityRef", + "description": "One entity in a series' role tuple (see ObservationSeries.entities)." }, - "Roots": { + "SeriesFacetRef": { "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" + "ref": { + "type": "string", + "title": "Ref", + "description": "the facet's dcid for this axis" }, - "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": { + "label": { "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": "string" }, { "type": "null" } ], - "title": "Window", - "description": "the years to serve. Replaces the spec's window whole" + "title": "Label", + "description": "best-effort display label for ref; None when unresolved, never fabricated" }, - "entities": { + "source": { "anyOf": [ { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "object" + "$ref": "#/components/schemas/SourceRef" }, { "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" + "description": "provenance axis only: the organisation behind the provenance, from the origin catalogue; absent for a provenance the catalogue does not list" }, - "facets": { + "data_commons": { "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" + "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" }, { "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": { + "description": "provenance axis only: the Data Commons the provenance's data comes from; absent for a provenance the catalogue does not list" + }, + "documentation": { "anyOf": [ { - "$ref": "#/components/schemas/GraphRef" + "type": "string" }, { "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" + "title": "Documentation", + "description": "provenance axis only: the Graph API route of the provenance's document, GET /api/graph/documentation/{dcid}" } }, "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." + "required": [ + "ref" + ], + "title": "SeriesFacetRef", + "description": "One axis's value on a single series' selected observation facet (see\nObservationSeries.facet)." }, - "ScopeAndUnits": { + "SeriesStatVarRef": { "properties": { - "countries": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Countries" + "ref": { + "type": "string", + "title": "Ref", + "description": "the StatVar dcid these points observe" }, - "years_covered": { + "label": { "anyOf": [ { "type": "string" @@ -15740,9 +19368,26 @@ "type": "null" } ], - "title": "Years Covered" + "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" }, - "granularity": { + "label": { "anyOf": [ { "type": "string" @@ -15751,113 +19396,128 @@ "type": "null" } ], - "title": "Granularity" + "title": "Label" }, - "currencies": { + "roles": { "items": { "type": "string" }, "type": "array", - "title": "Currencies" + "title": "Roles" + }, + "constraints": { + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": "object", + "title": "Constraints" } }, + "additionalProperties": false, "type": "object", "required": [ - "countries", - "years_covered", - "granularity", - "currencies" + "ref", + "label", + "roles", + "constraints" ], - "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." + "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)." }, - "SentenceToken": { + "Shape": { "properties": { - "kind": { + "shape_id": { "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." + "title": "Shape Id", + "description": "stable id of this structural family" }, - "text": { + "label": { "type": "string", - "title": "Text", - "description": "the rendered text for this token; empty string for a slot with nothing bound" + "title": "Label", + "description": "plain-language name of what the reading serves: a composed measure label, the served series' name, or the family's name" }, - "axis": { + "population_type": { "anyOf": [ { - "type": "string", - "enum": [ - "what", - "how", - "where", - "when", - "source", - "unit", - "method" - ] + "$ref": "#/components/schemas/GraphRef" }, { "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'" + "description": "the graph populationType; None when the StatVar does not assert it (custom-DC imports may omit any five-tuple arc)" }, - "segment": { - "type": "string", - "enum": [ - "coverage", - "heading", - "byline", - "departure", - "assumption" + "measured_property": { + "anyOf": [ + { + "$ref": "#/components/schemas/GraphRef" + }, + { + "type": "null" + } ], - "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" + "description": "the graph measuredProperty; None when the StatVar does not assert it (custom-DC imports may omit any five-tuple arc)" }, - "property_dcid": { + "stat_type": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/GraphRef" }, { "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)." + "description": "the graph statType, e.g. measuredValue; None when the StatVar does not assert it (custom-DC imports may omit any five-tuple arc)" }, - "role": { + "measurement_qualifier": { "anyOf": [ { - "$ref": "#/components/schemas/RoleAxis" + "$ref": "#/components/schemas/GraphRef" }, { "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 i its entity_choice names. The client titles that wording's candidate menu by this role and posts the pick's entry of NoData.options." + "description": "structural anchor; present only when the measured property is qualified" }, - "entity_choice": { + "measurement_denominator": { "anyOf": [ { - "type": "integer", - "minimum": 0.0 + "$ref": "#/components/schemas/GraphRef" }, { "type": "null" } ], - "title": "Entity Choice", - "description": "on the slot token an entity_ambiguous no_data plan marks for an ambiguous wording, the index into NoData.ambiguous_entities of the group it asks, on the part its part_index names in an envelope plan. The NoData.options with the same entity_choice form that slot's menu. Null on every other token" + "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" }, - "binding_ref": { + "member_digest": { "anyOf": [ { "type": "string" @@ -15866,73 +19526,72 @@ "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." + "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" }, - "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." + "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 }, - "states": { + "data_commons": { "items": { - "type": "string" + "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" }, "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" + "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" }, - "part_index": { + "upstream": { "anyOf": [ { - "type": "integer" + "$ref": "#/components/schemas/ShapeUpstream" }, { "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." + "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": [ - "kind", - "text" + "shape_id", + "label", + "slot_keys", + "member_count" ], - "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." + "title": "Shape", + "description": "The structural family chosen for the query." }, - "Series": { + "ShapeBinding": { "properties": { - "measurement_method": { + "kind": { + "type": "string", + "const": "shape", + "title": "Kind", + "default": "shape" + }, + "measured_property": { + "type": "string", + "title": "Measured Property", + "description": "the measured property dcid" + }, + "netting_basis": { "anyOf": [ { - "$ref": "#/components/schemas/NodeRef" + "type": "string" }, { "type": "null" } ], - "description": "null when no facet states a method: no stated method" + "title": "Netting Basis", + "description": "the netting basis code dcid; None when the measure carries none" }, - "observation_period": { + "provenance": { "anyOf": [ { "type": "string" @@ -15941,20 +19600,154 @@ "type": "null" } ], - "title": "Observation Period" + "title": "Provenance", + "description": "the composite provenance the option binds as the identity's source, which serves the measure from its declared components (the OECD headline: net flows to 2017, grant equivalents from 2018); None for a measure served from one table" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "measured_property", + "netting_basis" + ], + "title": "ShapeBinding", + "description": "An option that sets the identity's measure and netting basis." + }, + "ShapeUpstream": { + "properties": { + "source": { + "$ref": "#/components/schemas/SourceRef", + "description": "the organisation behind every member's data" }, - "scaling": { + "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." + }, + "ShareCardBody": { + "properties": { + "component_id": { + "type": "string", + "title": "Component Id", + "description": "the card's cmp_ id" + }, + "revision": { + "type": "integer", + "minimum": 1.0, + "title": "Revision", + "description": "the card revision the slot shows" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "component_id", + "revision" + ], + "title": "ShareCardBody", + "description": "One card revision a share shows." + }, + "ShareCardModel": { + "properties": { + "component_id": { + "type": "string", + "title": "Component Id", + "description": "the card's cmp_ id" + }, + "revision": { + "type": "integer", + "title": "Revision", + "description": "the card revision the slot shows" + }, + "frame": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/ShareFrameModel" }, { "type": "null" } ], - "title": "Scaling" + "description": "the frame the card revision draws, null for a card that draws none or an imported slot whose frame was not recorded" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "component_id", + "revision", + "frame" + ], + "title": "ShareCardModel", + "description": "The card revision a slot shows." + }, + "ShareCardsBody": { + "properties": { + "cards": { + "items": { + "$ref": "#/components/schemas/ShareCardBody" + }, + "type": "array", + "maxItems": 24, + "title": "Cards", + "description": "the cards in slot order. Two entries may name the same revision. A card share takes at least one, a canvas any number, a search or conversation share none" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "cards" + ], + "title": "ShareCardsBody", + "description": "A replace's body: the cards the share's next revision shows, slot 1 first. The share's\nkind sets how many it takes, as on create." + }, + "ShareFrameModel": { + "properties": { + "spec_id": { + "type": "string", + "title": "Spec Id", + "description": "the frame's spec_ or ops_ id" }, - "first_year": { + "content_version": { + "type": "string", + "title": "Content Version", + "description": "the frame's cv_ or ocv_ content version" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version" + ], + "title": "ShareFrameModel", + "description": "The frame a slot's card revision draws." + }, + "ShareHistoryResponse": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "the share's id" + }, + "served": { + "items": { + "$ref": "#/components/schemas/ShareServedModel" + }, + "type": "array", + "title": "Served", + "description": "what each slot showed, newest first, an entry each time it changed, up to the page's limit" + }, + "next": { "anyOf": [ { "type": "string" @@ -15963,9 +19756,41 @@ "type": "null" } ], - "title": "First Year" + "title": "Next", + "description": "the cursor of the next page, to send as before, or null on the last page" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "id", + "served", + "next" + ], + "title": "ShareHistoryResponse", + "description": "`GET /api/presentation/shares/{share_id}/history`'s 200 body." + }, + "ShareImport": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "card", + "canvas", + "search", + "conversation" + ], + "title": "Kind" }, - "last_year": { + "mode": { + "type": "string", + "enum": [ + "live", + "snapshot" + ], + "title": "Mode" + }, + "owner": { "anyOf": [ { "type": "string" @@ -15974,114 +19799,113 @@ "type": "null" } ], - "title": "Last Year" + "title": "Owner" }, - "places": { + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "title": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "title": "Places", - "description": "null for a role-bearing variable" - }, - "observations": { - "type": "integer", - "title": "Observations" - }, - "units": { - "$ref": "#/components/schemas/UnitsFold" + "title": "Title" }, - "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'" + "slots": { + "items": { + "$ref": "#/components/schemas/_ExportSlot" + }, + "type": "array", + "title": "Slots" }, - "ref": { - "type": "string", - "title": "Ref", - "description": "the dcid of the value the StatVar holds on property" + "payload": { + "$ref": "#/components/schemas/JsonValue" }, - "label": { - "type": "string", - "title": "Label", - "description": "display label for ref: its graph label, else the dcid's tail split into lower-case words" + "write_token_sha256": { + "anyOf": [ + { + "type": "string", + "pattern": "^[0-9a-f]{64}$" + }, + { + "type": "null" + } + ], + "title": "Write Token Sha256", + "description": "the lowercase hex SHA-256 of the share's shw_ write token, null for a guest's share. A digest needs an owner" } }, "additionalProperties": false, "type": "object", "required": [ - "property", - "ref", - "label" + "kind", + "mode", + "owner", + "created_at", + "title", + "slots", + "payload", + "write_token_sha256" ], - "title": "SeriesAxisRef", - "description": "One constraint of a series' StatVar (see ObservationSeries.axes)." + "title": "ShareImport", + "description": "One website share as its export line states it, less the id, with the digest of the\nwrite token the website holds for it." }, - "SeriesConversionFallbackExample": { + "ShareImportResponse": { "properties": { - "entity": { + "id": { "type": "string", - "title": "Entity", - "description": "the entity dcid absent from the deflator table" + "title": "Id", + "description": "the share's id, 8 letters and digits, as the path names it" }, - "fallback_entity": { - "type": "string", - "title": "Fallback Entity", - "description": "the recipe's fallback entity substituted for it" + "imported": { + "type": "boolean", + "title": "Imported", + "description": "true when this call stored the share, false when an earlier import had" } }, "additionalProperties": false, "type": "object", "required": [ - "entity", - "fallback_entity" + "id", + "imported" ], - "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)." + "title": "ShareImportResponse", + "description": "`PUT /api/presentation/shares/{share_id}/import`'s 201 and 200 body." }, - "SeriesEntityRef": { + "ShareReadResponse": { "properties": { - "role": { + "id": { + "type": "string", + "title": "Id", + "description": "the share's id, 8 letters and digits" + }, + "kind": { "type": "string", "enum": [ - "observationAbout", - "origin", - "destination" + "card", + "canvas", + "search", + "conversation" ], - "title": "Role", - "description": "observationAbout, origin, or destination" + "title": "Kind", + "description": "what the share publishes" }, - "ref": { + "mode": { "type": "string", - "title": "Ref", - "description": "the entity's dcid" + "enum": [ + "live", + "snapshot" + ], + "title": "Mode", + "description": "live follows new data, snapshot keeps the versions its cards drew when it was made" }, - "label": { + "title": { "anyOf": [ { "type": "string" @@ -16090,44 +19914,55 @@ "type": "null" } ], - "title": "Label", - "description": "best-effort display label for ref; None when unresolved, never fabricated" + "title": "Title", + "description": "the share's title, null when it has none" }, - "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" + "revision": { + "type": "integer", + "title": "Revision", + "description": "the share's latest revision" + }, + "slots": { + "items": { + "$ref": "#/components/schemas/ShareSlotModel" + }, + "type": "array", + "title": "Slots", + "description": "every slot the share has had, in order. Search and conversation shares have none" + }, + "payload": { + "title": "Payload", + "description": "website-owned JSON stored with the share as given, null when there is none" + }, + "created_at": { + "type": "string", + "title": "Created At", + "description": "when the share was made, as an ISO 8601 timestamp" } }, "additionalProperties": false, "type": "object", "required": [ - "role", - "ref" + "id", + "kind", + "mode", + "title", + "revision", + "slots", + "payload", + "created_at" ], - "title": "SeriesEntityRef", - "description": "One entity in a series' role tuple (see ObservationSeries.entities)." + "title": "ShareReadResponse", + "description": "`GET /api/presentation/shares/{share_id}`'s 200 body. It omits the write token." }, - "SeriesFacetRef": { + "ShareRetentionModel": { "properties": { - "ref": { - "type": "string", - "title": "Ref", - "description": "the facet's dcid for this axis" + "pinned": { + "type": "boolean", + "title": "Pinned", + "description": "whether the frame is in the pinned tier, with no expiry" }, - "label": { + "held_until": { "anyOf": [ { "type": "string" @@ -16136,285 +19971,412 @@ "type": "null" } ], - "title": "Label", - "description": "best-effort display label for ref; None when unresolved, never fabricated" + "title": "Held Until", + "description": "when a working-tier frame stops being guaranteed, 30 days after DFO stored it, and absent when pinned" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "pinned" + ], + "title": "ShareRetentionModel", + "description": "How long a served frame can still be fetched." + }, + "ShareServedModel": { + "properties": { + "slot": { + "type": "integer", + "title": "Slot", + "description": "the slot, from 1" }, - "source": { + "component_id": { "anyOf": [ { - "$ref": "#/components/schemas/SourceRef" + "type": "string" }, { "type": "null" } ], - "description": "provenance axis only: the organisation behind the provenance, from the origin catalogue; absent for a provenance the catalogue does not list" + "title": "Component Id", + "description": "the card the slot showed, null when a replace left the slot empty" }, - "data_commons": { + "revision": { "anyOf": [ { - "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" + "type": "integer" }, { "type": "null" } ], - "description": "provenance axis only: the Data Commons the provenance's data comes from; absent for a provenance the catalogue does not list" + "title": "Revision", + "description": "the card revision the slot showed, null when the slot was empty" }, - "documentation": { + "frame": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/ShareFrameModel" }, { "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" + "description": "the frame served, null when the slot was empty" }, - "label": { + "rendering": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "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": { + "title": "Rendering", + "description": "the rendering the card revision recorded for its frame, null when unrecorded or when the slot was empty" + }, + "first_served_at": { "type": "string", - "pattern": "^dcid:", - "title": "Ref" + "title": "First Served At", + "description": "when the slot began to show this, ISO 8601: the write or the first read that served it" }, - "label": { + "retention": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/ShareRetentionModel" }, { "type": "null" } ], - "title": "Label" - }, - "roles": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Roles" + "description": "the frame's retention, null when DFO holds no record of it or the slot was empty" }, - "constraints": { - "additionalProperties": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "type": "object", - "title": "Constraints" + "fetchable": { + "type": "boolean", + "title": "Fetchable", + "description": "whether the frame's retention still holds, false when the slot was empty" } }, "additionalProperties": false, "type": "object", "required": [ - "ref", - "label", - "roles", - "constraints" + "slot", + "component_id", + "revision", + "frame", + "rendering", + "first_served_at", + "retention", + "fetchable" ], - "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)." + "title": "ShareServedModel", + "description": "One entry of what a share's slot showed: a frame it served, or no card." }, - "Shape": { + "ShareSlotCardResponse": { "properties": { - "shape_id": { + "component_id": { "type": "string", - "title": "Shape Id", - "description": "stable id of this structural family" + "title": "Component Id", + "description": "the read component's own id" }, - "label": { + "revision": { + "type": "integer", + "title": "Revision", + "description": "the revision this read reports" + }, + "catalog_version": { "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" + "title": "Catalog Version", + "description": "the catalogue release this revision minted under" }, - "population_type": { + "composition_id": { "anyOf": [ { - "$ref": "#/components/schemas/GraphRef" + "type": "string" }, { "type": "null" } ], - "description": "the graph populationType; None when the StatVar does not assert it (custom-DC imports may omit any five-tuple arc)" + "title": "Composition Id", + "description": "the composition this component belongs to, null outside one" }, - "measured_property": { + "composition_revision": { "anyOf": [ { - "$ref": "#/components/schemas/GraphRef" + "type": "integer" }, { "type": "null" } ], - "description": "the graph measuredProperty; None when the StatVar does not assert it (custom-DC imports may omit any five-tuple arc)" + "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." }, - "stat_type": { + "retention": { "anyOf": [ { - "$ref": "#/components/schemas/GraphRef" + "$ref": "#/components/schemas/RetentionModel" }, { "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)" + "description": "how long the frame the card is drawn on can still be fetched, counted from when DFO stored it. Null for a card that draws no frame, or one whose frame DFO holds no version record of" }, - "measurement_qualifier": { - "anyOf": [ - { - "$ref": "#/components/schemas/GraphRef" - }, - { - "type": "null" - } + "freshness": { + "type": "string", + "enum": [ + "current", + "stale", + "pending" ], - "description": "structural anchor; present only when the measured property is qualified" + "title": "Freshness", + "description": "as the slot's data route states it: current, the newest data DFO found at its last check or a snapshot's own frame; pending, newer data is building and the card is drawn on the last check's frame; stale, DFO could not check, or the card cannot be drawn on the newer data, and the card is drawn on an older frame" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "component_id", + "revision", + "catalog_version", + "composition_id", + "composition_revision", + "stored_intent", + "fact_summary", + "resolved_payload", + "freshness" + ], + "title": "ShareSlotCardResponse", + "description": "`GET /api/presentation/shares/{share_id}/slots/{slot}`'s body: the slot's card as a\ncomponent read states it, drawn on the frame the slot serves." + }, + "ShareSlotDataResponse": { + "properties": { + "share_id": { + "type": "string", + "title": "Share Id", + "description": "the share's id" }, - "measurement_denominator": { - "anyOf": [ - { - "$ref": "#/components/schemas/GraphRef" - }, - { - "type": "null" - } + "slot": { + "type": "integer", + "title": "Slot", + "description": "the slot's number, from 1" + }, + "mode": { + "type": "string", + "enum": [ + "live", + "snapshot" ], - "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" + "title": "Mode", + "description": "the share's mode" }, - "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 + "freshness": { + "type": "string", + "enum": [ + "current", + "stale", + "pending" + ], + "title": "Freshness", + "description": "current: the newest data DFO found at its last check, at most 15 minutes ago, or a snapshot's own rows; pending: newer data is building and these rows are the last check's; stale: DFO could not check, or the card cannot be drawn on the newer data, and these rows are older" }, - "slot_keys": { + "component_id": { + "type": "string", + "title": "Component Id", + "description": "the card the slot shows" + }, + "revision": { + "type": "integer", + "title": "Revision", + "description": "the card revision the slot shows" + }, + "frame": { + "$ref": "#/components/schemas/ShareFrameModel", + "description": "the frame these rows come from" + }, + "rows": { "items": { - "$ref": "#/components/schemas/SlotKey" + "additionalProperties": true, + "type": "object" }, "type": "array", - "title": "Slot Keys", - "description": "the constraint and facet slots this family exposes, in display order" - }, - "member_count": { + "title": "Rows", + "description": "the rows behind every value the card shows, one object per row, keyed by the columns of the card's data file" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "share_id", + "slot", + "mode", + "freshness", + "component_id", + "revision", + "frame", + "rows" + ], + "title": "ShareSlotDataResponse", + "description": "`GET /api/presentation/shares/{share_id}/slots/{slot}/data`'s JSON body." + }, + "ShareSlotModel": { + "properties": { + "slot": { "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" + "title": "Slot", + "description": "the slot's number, from 1" }, - "member_digest": { + "card": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/ShareCardModel" }, { "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" + "description": "the card the slot shows, null for a slot a replacement with fewer cards left empty" }, - "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_url": { + "type": "string", + "title": "Data Url", + "description": "the slot's JSON data URL" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "slot", + "card", + "data_url" + ], + "title": "ShareSlotModel", + "description": "One numbered slot of a share." + }, + "ShareWriteResponse": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "the share's id, 8 letters and digits" }, - "data_commons": { + "url": { + "type": "string", + "title": "Url", + "description": "the share's page on the public website, /s/" + }, + "embed_url": { + "type": "string", + "title": "Embed Url", + "description": "the share's embeddable page, /embed/" + }, + "data_urls": { "items": { - "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef" + "type": "string" }, "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" + "title": "Data Urls", + "description": "one JSON data URL per slot, in slot order. A slot keeps its URL across replacements, so data_urls[0] always reads the share's first slot" }, - "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" + "revision": { + "type": "integer", + "title": "Revision", + "description": "the share revision this write made, 1 on a create" + }, + "latest": { + "type": "boolean", + "title": "Latest", + "description": "true for a live share, which follows new data, false for a snapshot, which keeps the versions its cards drew when it was made" } }, "additionalProperties": false, "type": "object", "required": [ - "shape_id", - "label", - "slot_keys", - "member_count" + "id", + "url", + "embed_url", + "data_urls", + "revision", + "latest" ], - "title": "Shape", - "description": "The structural family chosen for the query." + "title": "ShareWriteResponse", + "description": "`PUT /api/presentation/shares/{share_id}`'s 200 body: where the replaced share lives." }, - "ShapeUpstream": { + "SharedResponse": { "properties": { - "source": { - "$ref": "#/components/schemas/SourceRef", - "description": "the organisation behind every member's data" + "id": { + "type": "string", + "title": "Id", + "description": "the share's id, 8 letters and digits" }, - "data_commons": { - "$ref": "#/components/schemas/search__models__grammar__DataCommonsRef", - "description": "the Data Commons serving that data" + "url": { + "type": "string", + "title": "Url", + "description": "the share's page on the public website, /s/" + }, + "embed_url": { + "type": "string", + "title": "Embed Url", + "description": "the share's embeddable page, /embed/" + }, + "data_urls": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Data Urls", + "description": "one JSON data URL per slot, in slot order. A slot keeps its URL across replacements, so data_urls[0] always reads the share's first slot" + }, + "revision": { + "type": "integer", + "title": "Revision", + "description": "the share revision this write made, 1 on a create" + }, + "latest": { + "type": "boolean", + "title": "Latest", + "description": "true for a live share, which follows new data, false for a snapshot, which keeps the versions its cards drew when it was made" + }, + "write_token": { + "type": "string", + "title": "Write Token", + "description": "the shw_ token that grants replacing and deleting this share, sent back as the x-dfo-write-token header. It appears only in this reply, so keep it secret" } }, "additionalProperties": false, "type": "object", "required": [ - "source", - "data_commons" + "id", + "url", + "embed_url", + "data_urls", + "revision", + "latest", + "write_token" ], - "title": "ShapeUpstream", - "description": "The one source, and the Data Commons serving it, behind every member of\nan upstream shape." + "title": "SharedResponse", + "description": "`POST /api/presentation/shares`'s 201 body." }, "SimpleUnit": { "properties": { @@ -16550,6 +20512,79 @@ "title": "Slot", "description": "One slot in the chosen shape, with its current binding state." }, + "SlotBinding": { + "properties": { + "kind": { + "type": "string", + "const": "slot", + "title": "Kind", + "default": "slot" + }, + "slot": { + "type": "string", + "title": "Slot", + "description": "the slot's constraint property dcid" + }, + "state": { + "type": "string", + "enum": [ + "value", + "set" + ], + "title": "State", + "description": "one code, or a set of codes" + }, + "refs": { + "items": { + "type": "string" + }, + "type": "array", + "minItems": 1, + "title": "Refs", + "description": "the bound code dcids, sorted" + }, + "window": { + "anyOf": [ + { + "prefixItems": [ + { + "type": "integer" + }, + { + "type": "integer" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + { + "type": "null" + } + ], + "title": "Window", + "description": "the years the option sets as the requested window, first and last: on a published donor total over a range or every year, the latest run of years every donor holds the other total in, when they hold fewer than the part asks for; on one asking for the latest year, the one year the pool's read of the other total elects, whether or not it is the part's own; None when the option keeps the part's window" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "slot", + "state", + "refs" + ], + "title": "SlotBinding", + "description": "An option that binds one what/how slot of the identity." + }, + "SlotFormat": { + "type": "string", + "enum": [ + "json", + "csv", + "xlsx", + "parquet" + ] + }, "SlotKey": { "properties": { "axis": { @@ -17809,12 +21844,31 @@ "additionalProperties": false, "type": "object", "required": [ - "series", - "total_obs", - "truncated" + "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." + }, + "SpecRoot": { + "properties": { + "spec_id": { + "type": "string", + "pattern": "^spec_[0-9a-f]{32}$", + "title": "Spec Id" + }, + "rendering": { + "$ref": "#/components/schemas/RootRendering" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id" ], - "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." + "title": "SpecRoot", + "description": "A Spec, read at its dataset's newest version." }, "StatVarBlock": { "properties": { @@ -18158,6 +22212,88 @@ "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." }, + "StepInputs": { + "properties": { + "data": { + "oneOf": [ + { + "$ref": "#/components/schemas/StepNode" + }, + { + "$ref": "#/components/schemas/RefRoot" + }, + { + "$ref": "#/components/schemas/DerivedRoot" + }, + { + "$ref": "#/components/schemas/DatasetRoot" + }, + { + "$ref": "#/components/schemas/SpecRoot" + } + ], + "title": "Data" + }, + "other": { + "anyOf": [ + { + "oneOf": [ + { + "$ref": "#/components/schemas/StepNode" + }, + { + "$ref": "#/components/schemas/RefRoot" + }, + { + "$ref": "#/components/schemas/DerivedRoot" + }, + { + "$ref": "#/components/schemas/DatasetRoot" + }, + { + "$ref": "#/components/schemas/SpecRoot" + } + ] + }, + { + "type": "null" + } + ], + "title": "Other" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "data" + ], + "title": "StepInputs" + }, + "StepNode": { + "properties": { + "verb": { + "$ref": "#/components/schemas/Verb" + }, + "arguments": { + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "object", + "title": "Arguments" + }, + "inputs": { + "$ref": "#/components/schemas/StepInputs" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "verb", + "inputs" + ], + "title": "StepNode", + "description": "One verb over its inputs. `arguments` are the verb's op-spec parameters in the caller's\nvocabulary (see the module docstring)." + }, "StepRef": { "properties": { "ref": { @@ -18317,6 +22453,44 @@ "title": "Summed", "description": "A sum at mint: how many variables were summed, and up to 64 of them." }, + "TextOrigin": { + "properties": { + "kind": { + "type": "string", + "const": "text", + "title": "Kind", + "default": "text" + }, + "text": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "title": "Text", + "description": "the words, as written" + }, + "start": { + "type": "integer", + "minimum": 0.0, + "title": "Start", + "description": "the offset of the first character in the text read" + }, + "end": { + "type": "integer", + "minimum": 0.0, + "title": "End", + "description": "the offset past the last character in the text read" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "text", + "start", + "end" + ], + "title": "TextOrigin", + "description": "The words an explicit entry was read from, and where they lie in the text the part's\nscope was read from: the user's message on a request of one part, or the part's own\nvariable text on a request of several, with its whitespace collapsed. Words that text\ndoes not hold have an empty span at its start." + }, "TimeWindow": { "properties": { "start_year": { @@ -18429,6 +22603,22 @@ "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." }, + "TraceModel": { + "properties": { + "party_totals_left_out": { + "items": { + "$ref": "#/components/schemas/PartyTotalsLeftOutModel" + }, + "type": "array", + "title": "Party Totals Left Out", + "description": "the parties whose total rows a without_party_totals rendering left out of this version's frame: one entry per open party role and provenance that lost rows, in role order and then provenance order (null first). Absent when the rendering left nothing out or was not asked to" + } + }, + "additionalProperties": true, + "type": "object", + "title": "TraceModel", + "description": "A manifest's `trace` (`materialise.trace.ManifestTrace.to_dict()`, plus the keys each\ndoor attaches). It types `party_totals_left_out` and keeps every other key open." + }, "TransformationLogEntry": { "properties": { "transformation": { @@ -19048,7 +23238,7 @@ }, "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, whole_total_read, whole_total_unpublished, 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" + "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, member_unavailable, year_unavailable, modelled_values, group_read_as_members, whole_total_read, whole_total_unpublished, 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": { @@ -19289,6 +23479,22 @@ ], "title": "VaryingColumnModel" }, + "Verb": { + "type": "string", + "enum": [ + "aggregate", + "compare", + "growth", + "rank", + "share_of", + "join", + "filter", + "sum_of", + "quotient_of" + ], + "title": "Verb", + "description": "The closed verb set of nine. No synonym, no free-text escape hatch." + }, "VersionHistoryEntry": { "properties": { "date": { @@ -19412,7 +23618,7 @@ } ], "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. whole_total_available: {total, total_label, whole_of}, the dcid and label of the total the source publishes for the side the answer lists member by member, and the classes of party it covers, comma-joined (official, private, residual). currency_unmapped_omitted: {count, entities, entity_labels}, how many entities the conversion left out, the dcids of the first ten, sorted, and each one's name, in entities order, '' where the conversion tables hold none, which is usual here, since an entity no currency names, such as a regional aggregate, is rarely in those tables; its dcid stays in entities. deflator_missing_omitted: the same with entity_years, the years each entity's rows were left out, as runs of consecutive years ('1990-2001, 2004'), in entities order; a warning without params says the loaded tables cannot tell which entities. Omitted for every other code" + "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. whole_total_available: {total, total_label, whole_of}, the dcid and label of the total the source publishes for the side the answer lists member by member, and the classes of party it covers, comma-joined (official, private, residual). currency_unmapped_omitted: {count, entities, entity_labels}, how many entities the conversion left out, the dcids of the first ten, sorted, and each one's name, in entities order, '' where the conversion tables hold none, which is usual here, since an entity no currency names, such as a regional aggregate, is rarely in those tables; its dcid stays in entities. deflator_missing_omitted: the same with entity_years, the years each entity's rows were left out, as runs of consecutive years ('1990-2001, 2004'), in entities order; a warning without params says the loaded tables cannot tell which entities. deflator_projected: {count, examples}, how many rows took a projected rate or deflator, and at most ten distinct entity@year keys among them, sorted; count counts rows, not keys, and examples may leave keys out. Omitted for every other code" } }, "additionalProperties": false, @@ -19423,7 +23629,7 @@ "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`, `un_system_unavailable`,\n`whole_total_available`, `currency_unmapped_omitted` and `deflator_missing_omitted` set\n`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." + "description": "A run-health signal. Note: this name shadows the Python builtin Warning.\n\nOnly `observations_series_truncated`, `elected_shape_no_data`, `un_system_unavailable`,\n`whole_total_available`, `currency_unmapped_omitted`, `deflator_missing_omitted` and\n`deflator_projected` set `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": { @@ -19509,6 +23715,17 @@ ], "description": "coverage_below_scope only: the group members holding no observation in the requested years; absent when there are none, and when the served provenance reads an absent member as zero" }, + "unserved_members": { + "anyOf": [ + { + "$ref": "#/components/schemas/CountedRefsModel" + }, + { + "type": "null" + } + ], + "description": "coverage_below_scope only: the group members holding no observation under the source, unit and method the group serves, which the figures leave out; absent when there are none" + }, "unserved_entities": { "anyOf": [ { @@ -19518,7 +23735,7 @@ "type": "null" } ], - "description": "coverage_below_scope only: the entities the request binds that served no observation, sorted; absent when there are none" + "description": "coverage_below_scope: the entities the request binds that served no observation, sorted; withheld_by_registry: the places among them at which the registry withholds data, in the order the request names them; un_system_unavailable: the places the UN System Data Commons could not serve, in the order its reads recorded them; absent when there are none" }, "requested_years": { "anyOf": [ @@ -19542,6 +23759,28 @@ ], "description": "coverage_below_scope only: the years the data covers, both bounds set, beside requested_years; absent otherwise" }, + "withheld_members": { + "anyOf": [ + { + "$ref": "#/components/schemas/CountedRefsModel" + }, + { + "type": "null" + } + ], + "description": "withheld_by_registry only: the series the finding read, that of the first request that left a subject entity without rows, so one; absent when there are none or the stored warning does not carry them" + }, + "withheld_provenances": { + "anyOf": [ + { + "$ref": "#/components/schemas/CountedRefsModel" + }, + { + "type": "null" + } + ], + "description": "withheld_by_registry only: the provenances the registry withholds that hold data for that series at those places, in the order they first occur across the places; absent when there are none or the stored warning does not carry them" + }, "omitted_entities": { "anyOf": [ { @@ -19573,7 +23812,7 @@ "message" ], "title": "WarningModel", - "description": "One manifest warning. Only `stat_vars_summed` sets its three structured fields, a\ngroup's `coverage_below_scope` its three member fields, `coverage_below_scope`\n`unserved_entities`, `requested_years` and `served_years`, `currency_unmapped_omitted`\n`omitted_entities`, and\n`deflator_missing_omitted` `omitted_entity_years`. A `None` field is left out of every dump, so other codes' warnings, on\nthe wire and in stored version bodies, stay exactly `{code, severity, message}`." + "description": "One manifest warning. Only `stat_vars_summed` sets its three structured fields, a\ngroup's `coverage_below_scope` its four member fields, `coverage_below_scope`\n`unserved_entities`, `requested_years` and `served_years`, `currency_unmapped_omitted`\n`omitted_entities`, `deflator_missing_omitted` `omitted_entity_years`, and\n`withheld_by_registry` `unserved_entities`, `withheld_members` and `withheld_provenances`, and\n`un_system_unavailable` `unserved_entities`. A stored warning can lack a field its code carries: a `withheld_by_registry` warning can\nwithhold with none of its three. A `None` field is left out of every dump, so other codes'\nwarnings, on the wire and in stored version bodies, stay exactly `{code, severity,\nmessage}`." }, "WindowAll": { "properties": { @@ -19812,6 +24051,161 @@ "title": "YearRangeModel", "description": "A run of years, both bounds included (`materialise.codes.YearRange`)." }, + "_ContentVersion": { + "type": "string", + "minLength": 1 + }, + "_ExportFrame": { + "properties": { + "spec_id": { + "type": "string", + "pattern": "^(spec|ops)_[A-Za-z0-9]+$", + "title": "Spec Id" + }, + "content_version": { + "$ref": "#/components/schemas/_ContentVersion" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "spec_id", + "content_version" + ], + "title": "_ExportFrame" + }, + "_ExportSlot": { + "properties": { + "component_id": { + "type": "string", + "pattern": "^cmp_[A-Za-z0-9_-]{1,64}$", + "title": "Component Id" + }, + "revision": { + "type": "integer", + "minimum": 1.0, + "title": "Revision" + }, + "frame": { + "anyOf": [ + { + "$ref": "#/components/schemas/_ExportFrame" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "component_id", + "revision", + "frame" + ], + "title": "_ExportSlot" + }, + "_Ref": { + "properties": { + "format_version": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "title": "Format Version" + }, + "members": { + "items": { + "$ref": "#/components/schemas/_RefMember" + }, + "type": "array", + "maxItems": 256, + "minItems": 1, + "title": "Members" + } + }, + "type": "object", + "required": [ + "format_version", + "members" + ], + "title": "_Ref" + }, + "_RefArtifact": { + "properties": { + "rendering": { + "$ref": "#/components/schemas/_RefRendering" + } + }, + "type": "object", + "title": "_RefArtifact" + }, + "_RefMember": { + "properties": { + "spec": { + "$ref": "#/components/schemas/_RefSpec" + }, + "content_version": { + "type": "string", + "pattern": "^(?:cv|ocv)_[0-9a-f]{32}$", + "title": "Content Version" + }, + "artifact": { + "anyOf": [ + { + "$ref": "#/components/schemas/_RefArtifact" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "spec", + "content_version" + ], + "title": "_RefMember", + "description": "A ref member, held to the pair a root of its kind takes (`DatasetRoot`, `DerivedRoot`),\nso a malformed member refuses as the request does." + }, + "_RefRendering": { + "properties": { + "without_party_totals": { + "type": "boolean", + "title": "Without Party Totals", + "default": false + }, + "groupby": { + "anyOf": [ + { + "$ref": "#/components/schemas/GroupbyOptions" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "title": "_RefRendering" + }, + "_RefSpec": { + "properties": { + "spec_id": { + "type": "string", + "pattern": "^(?:spec|ops)_[0-9a-f]{32}$", + "title": "Spec Id" + } + }, + "type": "object", + "required": [ + "spec_id" + ], + "title": "_RefSpec" + }, "datasets_api__capabilities__Capabilities": { "properties": { "capability_version": { @@ -19994,6 +24388,11 @@ "title": "Pivot Max Output Cells", "description": "cap on a pivot's total output cell count (rows x columns) before pivot_over_cell_cap" }, + "groupby_fold_max_rows": { + "type": "integer", + "title": "Groupby Fold Max Rows", + "description": "cap on the frame rows a groupby that sums the frame folds; a larger frame refuses over_ceiling (ceiling_kind rows). A version stored as a frame1 document folds row by row under a lower cap" + }, "operation_retention_days": { "type": "integer", "title": "Operation Retention Days", @@ -20009,6 +24408,7 @@ "async_max_rows", "async_max_requests", "pivot_max_output_cells", + "groupby_fold_max_rows", "operation_retention_days" ], "title": "CapabilityCaps", @@ -20748,7 +25148,7 @@ } ], "default": null, - "description": "why the refusal fired, for the two codes that carry one -- omitted otherwise" + "description": "why the refusal fired, for the codes that carry one -- omitted otherwise" }, "constraint_id": { "anyOf": [ @@ -20970,7 +25370,7 @@ }, { "name": "Presentation", - "description": "Create, revise and render presentation components, and read frames and the release." + "description": "Create, revise and render presentation components, publish them as shares, and read frames and the release." }, { "name": "Codes", diff --git a/tools/tests/test_capture_client_contract.py b/tools/tests/test_capture_client_contract.py index 9506c6e..0e2785a 100644 --- a/tools/tests/test_capture_client_contract.py +++ b/tools/tests/test_capture_client_contract.py @@ -734,8 +734,8 @@ def test_a_long_build_scan_starts_after_the_recorded_year( def test_the_long_build_scans_start_after_the_recorded_picks() -> None: - """The records hold the DAC pick at 1967 and the OECD pick at 1968.""" - assert capture.long_build_starts(SCENARIOS) == {"DAC": 1968, "OECD": 1969} + """The records hold the DAC pick at 1968 and the OECD pick at 1969.""" + assert capture.long_build_starts(SCENARIOS) == {"DAC": 1969, "OECD": 1970} def test_a_long_build_scan_skips_a_year_without_an_estimate(

2@Zm)29+A@zE zD!86{>B;h`n5^T^c$lGOQ(>EVt{GU(=Y6a!p^hu#5Jfob>m?Q`-{XprZ@IdBaccwB^x~4w$An??9J*)!gysEt50RDUZMd6P?!M;1jfsZ-gUIA23XcBbN zBSdBifvPEPiIpMdgc!0Hw?;XR6xG7O)E{RFBE9-@PD+Y5dnt%f zOdy1dX@OQhb9?~VnhAjuqI1p6L z=!InDL!(3VNZ{M__!oZ{w+0-1zfud193G*~q09`s)-Dnr-_R)CplG(%SER+}L!Jr|%U9@$Kjk}|@t zF#@TN;IOk&+=H4D%5RHjO9GLo^W=cRd%1Lpi$pCK?d`kG&_UPx(p@OlLZ_;bGg^r3 zWXStMVE(03v+%6aq6IjPw4jU)28iY8vR`s=bRUH40Bgrp$DmF#8M0w`n2qxTbC2LS zK29uwpZV1Q4lB-F-iH5#bL;WyQR?V%7aZDu7`Eup38-F7HUy1X{bP}biVD^3fOIhW zMF<5KEvZpKynRJVMmv@_ke4~RcJj}BPA4S?ia~Y%4mJg~K6=77$f(_|ESHnZ;pGZ4 zR8^Tt<(t-lM~1q=#xiPcmst}+OZJ_>8C}dgo19o*g*rpULY9YB%2>y?Rc0dZAch!7 zIw=BBbLHgCiN1ew0}9<-W+=&A!O^B9xl*uf|H8 z)LKz$&O`!xC62o3E(5ea zPtKK-w#~#U4}*9^L8cz{(tKtFPMAhv(@s=8H`oOF=+|yAbk4dO4A{ABAco38&S1h@uYzUmd(+^Iz5~L zN!imfAII@=0*>y3vvFK;O)0I_#5Hb|K{^WwF7a%vCf2q23*SlSed z*i-99{kn5Z5lPPzqoMWlp_wN_@VI|J!J#fHyii4^G!^wJFkb1R%)iq_b9nPBZ3x_n z-pez|-W^H{b$Z{0Q$&j#Z*ktWq}Z#7IPWQ)RKM*MeqF$OHDz?&Zvu`?(a$zu8xzdw1IXMDT(uY3$$=1>3ERcyz(hX9;>CEZ{*VC-;hIjbd24*{u0?-<6`Qfcc?M}Cs& zZ+SARJ1X2E76Qv%`*~{f_vUsx=#Qn2(8T!vFHajn4S|)l(nc9 z`C|x*&IXtXg{lvZwe3EI>G4j;jagxWlyUVtqclk?`V>@p6jRqTDO>C<)xEDjgUMT7 znGhQ@Nh_5usbTzz6QI5QOh2Ps%16!LkMD)b&LF*;J0StwrOuOt&<~C%$oaefpj^^} zcds1-56VC7aKLD^d**iztXR1EC4SPl{9lhEsc?JYMSR0BZ`!eTkUDf07ZOcQy2?TC z&Nj$*+e2K1F9|IW^V6RAc>0*$KDZR#3AmO(eT&QX)(NO-%RG3QP ztgq2Ug`bbX%Ut&hN4<#twU?7D`Ge!b$*t4nwd8b=7Q}0Hptpw!34(rL%J2KNc=EFg zMknllh0+4My@Ycjlgff3%-KbvcUIim2yN81W#vAUN#SaEnO&ykVY%jmaZNJBlla_2|1a%yLD*nMUIPVbK6I{nW8LQDW#bMA)uP;T(l6}P*0w{la8S4n3 z4&S9_1;X8_TyYe=GkvJCmaKDun?;3S(ePQg>d>E~tHtxM4%*CpzNXimyL#tj>q> zhb_t+)D=#E6~c&U+??M!R8mG1za|S*o!$YEWnFEpu~R|u2G7@@eTK{3F)mI`iO`&D zXhDP?oV_#2^ugGrLjSgD9(E#lg*s4$StOPi*Yp!Jkq#@TX-U-4qM#Bvn-f8W1%6y6 z${_u;xOd&^N^p6}ZLyYlc*Gj58d)Qb29eg&Ik^w1{@d(A8g?+JkOF067^=HJ6a#hk z8w3VM`WSOieEI{TeR*rHi4^}6(?EWD$O3Sg-2zwbPrg|X)e2lRdrxrWpGQ^n;(mikb6Tlg)=cJ1lJ@@Re>^oq?vfcr-gs1W;Q_Zo~; zzHfO5$$ToNd4-P4t)!R1h{t^}Axrh;JfK89MKB4msOplr94?STXZRe_Cv8vz?$Ngxmpbq{W zi!~0;5B;(J<@ydvLfd(N`q`&3S%^g)ojBu#Ii- z3DZL>i(8KcBng*e#gVpsTIryQG1f|+T7MV4WB%#yAfME+=I;xA5F!TsF4IvtqxiV- zS3n=nl;KZUpQd=nNQjhCPY-78=*gN~Epy^e*MlppAa=esNHkLC_SyG6G&FNo0IO+A zU5(Gl6ixBUaOQ(dj{mLU6DzC5`(cRIL7Qt(ZU~F6tOXuLNGvpS(LJ1TraTkGV zuPUvJ1gtxjQDdbIKYW6YF=Jk^RY8axQsFJgudc$IdvN<=Kb8rFQ|2dPi|^N3mz3X- zw=oO~^e(L&848!uAazh%DNNtwdlN;!-tgnQ@9^J^;1)KJMa}VSg`f1soAs*^>J<&I z7F!1tBS1H4X3DZ}!x;K#_sVtMb@=B&Fog9lmkV&yK|I5sHoR4s8XBG{Q6Sy&PKhWqJwjPb zt&^^?4vOrqN*oAHXb<^t_1X@Hu43IYZ3r3~ZOSU@((F?E@7dhKQFBLY|UJi3hg@ER}LI2It6EcmD)M2R1l?nJCeMEf>QhwQ# z$6BkD(SO%H3_P-q&8;Q&V9pUH_AJyQ%hnW+5DvLSWQZlu!`k^=F-z913jD7u{yP^NBQe-U!u#_~iR1aGsHRA)`=N%2t7_9-Flq>bN-)Sk3?3 zTIqn+bz+N<{>yPmim7V%1zQ<4b!%hR(F&DyIZytW2t4DZU&Dh{U+x6<*nb?#^1ig{ zn|HW%(c0fU3{oL6>MPOyp&nE0CpN#JWA7~vas{Vi#rVt>0C!2`i@{h_UPT%SoTeEW zFu&YFT|u#9HRx)6Gy;OhteGO3)YD7R)Bz}at#y*48<5L56$)RxV4zJ8U>S+9|KHBQ zbtcxF>?HFh0Z;h7p1>{sR+|_NS@_r}r$S>r<|mx2#t?ahXb2rGUWkZfs5Bex)Szsk zg^Pcyy|IcivqNJt$@LA!5<+BLSuo9K0@)%sscAO+xHRqqh&gxWT5~bY*t-C7PW1UdLACR<4g6{mnm%n7|azV=FL@SvE;66?RmZ4agFyL>i%5 zWuijVcla6OT~e7zg+F(IQ_Ps}fvhN1X8Mt1pA%aCsQPy5zxKa8Z4AvzMOP&ox9)S98wnpjE1Hn+~4yY5=Hvz3BPqOv%W}-Fi|@$O%+7 z&@$;DAMPV|LC=lLi?|KB2I5={$4D4*7J@I>^0m-^`?VU3sNXffk)VlZoro%bv~ofq z*&GebR~ATes3Kt}tH3@2dSkoy z$)QX~lCf6nK%4S0TybCk3{B&wHnhlQaq37cW;+O@lXZaAL72CuvM#tn60Mhsm|Alc z?Z{u9*%C^a`p~joWbZA`+J?;Civ%)Yu+*(>Ao8P}UQPB~Weqsxc>5lai>}C10b*Ka0>0oP=!vlNJ=aA{i;DblL~1SxK~2g*)}&8#JvzX zi7JOVNA&Qtpv(+AGMT?EVH=S0iTDAwuhVujP-@GcAfE7JCnG3eTV}LS=DQSl2mH68 z#R_us7fjo6tr9fldoo@Ep|2O_z%7pMXk#ef`y7PLF?+U{Mz|-1#s!w-!Pi*fc|}r2 zbNv4U>fShb*{G*mQtz>~e)Qr*v{q5eznnOR@evDIRR}%#_=&NM28N4CcBbSFtCFJc zVJ>*>`p8j#(E})wBDTooNy~b+2pQYGj22hAs>BXbX7O}02K+-7)B~wp_+hczbF0wU zhlCnBfJGmNEy4{iHpM`NV;i&rb@WVSsV|Cw&uoyNbC3rZ{+*xefYX&m2C?=mKwDvy zQHM~afP<5jcmXG>!!LX;yBH{wo~~3=A)}+Yhze`(u}Qyh;pLZ9_~s=}@k`z) zomg0TK#BQW;Bs0}$DuvYYQA54TNy2Rte5EMfpKPff zE-}ynmTM9xoh+=dmC(7hf8n$KPjifms8^UF4xa6`Wz;IP65FhVKhCig(2FB4Dq(YM zl`vWS>AMolp!AT);#ET=_(epyqzd`p4LCY_IK*LBo`K)z@;DCR1xuP~E!2AHfwqY9 zO{FZuN-OU8Ik&o~DZ#~B1E{5GKh}+8^6k59rWbV-eh)|q|L$kd=4ieMe0R%lvlU=Q z#1l+Sy7?^Ds_;iSyN8~(omGWy)=hEY`(W;Sc1som=ab9!unYp0yn&FFXa@902m`Sb z=J^>hlb>$_m=^pk4tVcc$RX3BrqWFqC+7~7+4-6>;@O_73Z)xTi=jb-^Y9W>>R=B8 zwG4lp1?Q}~D?m-x&?gc*WmZJMY73{ohP%e21Gbp_`4)^Doey#QCK9Alluv|{xqA`D zpg4Zh=%m&kJA+<1ms*+`dQEc`*uuT-&AOFze3A{*o%?=)Swkywz5%C79=y>a1XhX# zvNMu2d_HqL8xNw7ZOCj3uDvJ1priBrlsFb%1A~R5PADTfU9>t`ZHNaxHnjMRRfUa~ z>&Scu>-5Dt7#Eq83KFbRiaZLksfpl1kO=+ephvzvv{jUOe+?vO8o#Kir3`t&mH-s~ zIhibw>5IWq;ck@8Liv{4Ysx6ybsfh&$B%%!&i9=_%VJZAQA5v_#X%g^&EkO&)^EO6 zYUn?@PR1&FKs^U(`iiR`;N&1fgU%|MCPw0b)YU+qm=jz{0C8<(Q5z8s_eUOB(V|5d zBvAIK5-gNQaVB&quG zbXbaU!9d2o zxIjtZBd%JGE{(w$oFb+Te&g)dTa1)Ha#en4<>Yc=iTsh+;Jaf3TMW~-p|}Px{H6vH z_p7n8m>Q;}uvPxlof`wA=BQkVeXprPGmKSuWBtJ$Tx)MVv8I^1kM&8e!s@UoATSCv zS`2nmsa8Xoj|o~U6)x?8tO~&?B1XL*o9kc#IcFHPj0s_@IjKvMc*#RY^%*HP1J#f7 zQ=*(-x!vqQSpF|yP9O0IsHioYfqO$3;WkR*=mpqhrgMNzxeEYR;!@f-aG;^W_&-uLqJ=`eazvOy1<>#bjnZ4%5z?f&N`emJ7^W zPTi9Vbh`+XLjIq2Qpw!b# z8XiNm|E{Qn^n9u@tLgC{DJ;*OrVg`{GMiUdIu{xw6~y@!r&mx#W3kk4`4LuG9|@xQEHTZ$5z8$Rb(MwiL;h&xsoOO(u2RdtcK)9ozIsF`aq`0B~gYfSjw}>x>lD`_ttbT56z_ z*~mjkRLOCwd-TK4jh%0E^>@NpxMZHfT$TqXte1+5qN*@osGa@QaUV4t#Zd z=hZ-6BYvq-Q$^@qo17|2ufzTrw!M^8(JODZvz91Ycfu(tqif#!N-F4wJ)_woFWR=` zG^B9HZapNZYHL>zNP6Z=B~)>ZCks)XZP+I83M?@EUilfWNnp9r8DM`0XCNLl~q86(M!VVo6$SOh|iY?vVu~k7=VvGJ0rhM zn8uu2jq1nWm9_BN59F4S4$kCS(rgW)G;LeZl4-7nv7h}Fr!?ac&^*_Gekmu=mJ7v*8z^Ur#b6GfVm}k13;9? z1W1ag6=I*#QqP&cB`_~AC@crD6(5AJ-f*NK8^h?-%m({~}`ELXK`D;d` z{-(u?kgtkD^u%A{6gw+vF?T*1OE-K|%-M0Z_WMYuiQRaz;}U&lj++?8l3KPipXMG|=%&aS3%2Pes-iZp)=f8?7d7`T0}7pSB0 zeXey-r}AQ$T`IhGr?8oL;J&CBHyJg6t6<5FCvb9^=UZ|!iFuYt{IN&iL8E&dmiRz3 zBbdG~+uT6;n5AN-!1~b2QYm#v{Q$0NYj$N3bvPd??dV++D;O)dQJB2E&CN=fr9WAg zmr+&aDy4(UR?P+ZX84A1ybozQ3!g31tAL3k=gwtS939tdQn^#?*)r-#*>J7|`Py-8 z17Zey7tRp~!@`BMAT9f`4%qsI{$M4O`ioZsdG_`4Y7#sO4;DhYhp7-pzizG6&@%r3 zZ3&J2FbD$Ce0;qzc{bi+i=-NvjZd^gU;gO?65CUs1y5r1~GFKBLB z+(cW8ykLbHwE$sprJ9yL@iDsS^I^Y20htAVCzp}G#f8C+q8s9ms=ie6@HT6-;GEP; z8G<#Ik>ENrB_5MxUJt{O|KX+4P5BEtQCC_>#8!UAH$`F>sa5$F;doMDQ}2PuomhqGK2hlZ+3H!5P&fb{U>{!7lmGA|@~ z61#(9J?4wwohyi`LZ%1merG7>^2RbYwif=h6E&0I#JLp`pe>?oG6oo%7T+?zpi`=Vf7pG9s9;Z`bPfBYcl6V zHEjU8-N?FWVnuRK%VeG&?P>DRBkfULUQG%|EtkV@&rB8b1I7w;yZI{N$>cpniLTF5 zV+j??{x(8Ecpb(s_xey=n>V#Nq zR?Rot!2E@K@x_hC`AT^5BO`DmchGBuz<5uthTPc1)&`5aSSZz$p(Sh%?A8#fgvz`- zYX%A2k%+lbZAz|YlutsC_1=Zb3UN?QjNW>>B*@m3J!6sD;~(sSUh=d5!ox~l{-DJg zsg|4pQ0UPU58HC|B~&OQ`CojCTUH|DqKyF;3VY<)oV43kH*58!;R#RSm7t1c<8(-4 zMsm7l#9o~1A~h1F9BZv3BnHZiUoJs_ImV`Sim6t}fui*c*3pU@y6(l-db3?jqS*aI z@gUd43}C0Bdn;I8)3%>*MjssykajPwGgr}|FMF}pAX@LR;E#i~Wvt4dUTnq56#i17 zu6d5Q@MqnV?^shfb^P5CziqOXV1mDY{TrTnPm+f-h+P1nVlKr&auvWvbfqaFJhL_# zD+s?#G`-A$x3EsdPOY3eT;FIxt)`m+lUHW|vG_wxp}u&L^s@6pfTE2#%mfU$-6%h(JrW-Xd@e*Vm z;@a9^!S#J}73A+P00vCHHz)TalN7nwR^fbd5#c7|fE6rNq;KOIJk0v1gr~xptAGPx z`dM*3&Dh0Idm(5kmqT&2IITHicd$e5hsQh8uxOdy@b76f(9z=>;dA7zWVQi;-oxE& zwKomC^4eHLnJkAmld7s9454uAS=Jz@M?S1JmeIEPEp4FRL~D$l%J+4))uJJi)AXQs z)~3P3axUidK~(CM4oWj`y8v?R>6|4PTPT2$3jOz@P=EQoq!__qv=O&Km%E&_JS%~= z_;+TZk5~=?Rylr*t;wW9tKmQ~VOp)oAJ6vYOqr#Z#6%ygSc_4A9aw_9qb;N=nkuJ= zyS?z2?_sV&n_zIvRo(&s#ao^rS^YznR!tpoLzE_}F6#rCbxfIsXFDCYZB^8yek=-Q zD{YOF77l+XQ=!H2M(Jg?A&_d8E&;uC7uw=!F2@O06-bSJd)#l33OyCx_~xSLP-7;w zjQD}2!F1SnugwfC{-dr^L#=;y1|FoHe_L5hU*xxzlu4_44Yk@zNcbi(E^O{t}QI%dwaYmFC< zk}XXkAaDS3t4W73%MmNz!W4ywRX8hrXe8P@!^%V@Eb6~4lNDsmNF@j`whOG0OCp#x z)KQTJ3+|Zy5Hk4il+8{Zr&r-i{$2{GBCHDe+(f>!KUnoR&j%rUN&UArIB4HCMtGxn z&golF3%LPVUpeeNq|4E*KeQ!;?Tza@C8lCN&#U7h5X`sTSrf9UZ|~W1DC0AUH38rH z{D!OG>I1VuMx$IzO0yQUb1xl$MCIo07#9+V$u2TVE|#5nTL$vwM?QkYj)5GoQCNQx z4-*nci4xEEsuRWZEZi+3pjp75I@-i5g83HNcO;P}*Bi;uT;;%?h$l2Ok z39bJS$Etj2<7PJ@o4O|7A$nDnFIUl`P$J6UsP$%^KKIU3s_@$TchJw~@kpi7P51qA zrql6xF%0&Y;q?8GXArCBjNDVKl`^L1kdDCQOv>a~;bjUFcGWnjBV(tw0d@Ax+G;58 zJ`h9rK?=GVW{4H4e{ujO`qDPIq~TE-hEaBjtLltYKpsfQzt`Gu+pC4P1}ZGKD0P%+ zuvqX%u1ZRr=-dny_m#*A2V%3XDD+ce-B}-WungsRCCNDe*cEOkaU~qa zcJgy8jll$h7GCBuW!T0*Qh_c56X#Ztthn4__zP?a+}iU6pSvMLPZ@bEx#}B zi&@I_4$=aV^nOqdrppYiK$(h#pbGOL7Gh>qYAXe*$kBzC3_Y46wOus6@AuJ>jL+0U6A&$(eHPDq_!tX0Rj%c+^spTqQtM^L%n)l9*APni0hQWJ z+HKe7N(H^fvUp(N%s@PFa-$Zo>qm4xun$RJEdyDeYv4c8$twm)6twh6I>h`@+veiX zD!%7*KB9IzUMC zQ$G<_tQrvAbJZ!cK(5tsImnix0WdRwOdPvhM_#|@tf6E}2CHr*WwzyO?n8b5$*G4ye-r}JW zd!|Hi#bMO-EjZ|?n_$e8y8gaj>`_ZJ)48Gqn)%-;F|yD{ZS*Q3 z4JI%2VJ0XIK-1+~;7L|yB?MI4OpHz#ERiZhTZ*Q#LR{=8;s+|Dc>e7?P>$(*Af|*w z`~WrpGf}1f$M>_!mK7zd$yhCDF05NEvU6XS1mrP}gv)=m9{ZWM@+#MPo3can@Mv0St%P!)SyB-zhQCa|humGRr>V%5VRv;i;j053>Uqiql3&yQOuF0^PA1 zWe!!$?h5KnOc7UPMV4A1UiBL;vL)Wq18>eB32UI-%|=*CMt3e)3mI)Zk%8>LKK4?q z6;*cZ#b&DMf3N>F%c(V{5|)PlH;;AuQcdwO8TFA0feFXWD(RoUb#i!Q()rIOu!>f6 z)xNIK*0tGUV~;QcTh!?2w4iGq8Yy$gJkVT413yJWh1=)wT(4o1QSdZvz(JF4xerl{y;d8`IP?#J2%H`zH39bwY|L=`Ch&UU;LOGPZjAhhtKw~yg z#qbiCRp!$&@Wt`H6VE`nj-$~3R;7U+pKu+BZkg>iBMCjyVdSal=LDmg77tX5_cuIf zgd0`g*)G8svwy`jo+llIjI=)~cA{eYf*7p(JI+-E6J0E8KpW3jacnWXm}PH8XGREa zS5rZmR&BXjDKU$}DO_qLsl|R3?P@}Z;u%*FMoby#?4Y&pwuulsGu8~%yrkwV{@5Py z^RoY51}#P$SA9W&-Je(8dNqDk8T|W=Zjfy0DYO&Z2t@=%N^vebz*ZITIT!)sj{Zt!;S12*I_#N0e4vq!oscR zBt^8sqpMa$b5_oVEHw1WQ8vK;ThBE_qoM%M?07V%_92sRa&ELYy#OL+Wgz9O`4OQP zwoc5zPR=BSa?H-r<2q=C z#5${Pi$!Qz$vi2TkAygOUXhb43&j?^@^+XC)8U_F1@NUITFT5vV)q5$=o@vpCv;%n}-X+^&KiE~GjJ5`*u7p;(IfOjROIuEcm zW(Q&%tSa|Yf)0N!vFWM%i{(lkbx%mq!jzr$R)!E43c;Agt|1jn!4?VTaJ7z1P7VneyE!Zm3{#f*` z^sXT_ZhCz1TUo7-l=1!gSFs9vx8|bFO=oGhZgnA8+hPZ>k9g%%8A9*0ii1%9cdbO` zVx__(O(eK^Dxn3=VXHO>J$5P)RWW=M&;;#><}z^?9b*YL31F2F`rRihDa_>=@fker zCk8hTui;`#o^vCh!dohs>0uA&Xa5zTe}A&LyPW#3QLL&dRs4QHgg1{-h&|i~i1?$Q z*s0>3;yh*Wyx#0)CDnAxJ`I3xvFd`vN#_QL!@D@`5{_+_jDT{*VuAQcw2Tj=E? z`x0%%GIwGhwX6XP8_+3=eKo8L;t|j9n9ddVBlg{_&;~lxk*meJuR)&BT5L1+>~5S!L7ML6s@o9DX|6bv2#K6?IN8f2+lh)i zDI&XiEVqg~3gFklTnIL5*txulaPj!Nxv^Y9hGdBwo1IHBI|=_4X9tZo&iy}_V3JZg zc$X0}^KL>-4#@o<`a|fRo8ltgcbh_BAJW!$6l*!WJX~u)L)lr(8tVf3Xk?5J5X+Gw z0YDiF=f@a;6P!Jqq}8!JBE+ddHo(en0gx`H2 zU~}0Q5~LV@k>b8W`B%9`y_jdl(gTPEJor@_5eW zPyW3s7B;@IijOYsZNtRUzvdKONe+kFZPhfJ4$k>@h$258RY9nssy%0wk;Eljg^DEo z&ADWxq|S>cN!Q`eMG;PwLe4$s96ib7DVz?O;VWEqEE$BAVPwi+rJf3}-irovbsL+T zFtuD2594X`swR;!b8wpn z!j82vql;M4sUJdnwa7;Sihe2m%~(q=d2p6Cv}Wn;K60sW?R6vQ$-VJ!$KtkAuHTa7 zNTq^OrIVH6{~uT7%LHgg-Tn|rp%C$l5<0TBjg6=LnjT7|Ebh*P_%R>SlI7%x9!wB6 ztcEWv?7J;~S#b)6L-@zvtBgEaZO){I?eU- zNxPar2(nIfvSrePGtY{B6fN#V;|EpRq=gky;oW~@Y!=$T(M5@acHCnE{EQAw#L>Gw z6-Tm%F&3jcVpxoUVYq6YxS&y4hJ*&I zk6rN&2IpF@;U3jerZ)aI2K>#uVMZ7AE&mOCS+;iuV2Ftgyx_*pQ7~)2PlwG@f8K0( z-R@lMM9~CS3El3X^F}H}3}5JBp;r4k44ogn28iOAURkNe+YJ_JbExo_7J6tn^i`#S zI_|1OXW>Yl*wDP|L8Y;R7R_#jNfx>yAsWZ;mZQ^?)a>U}?Ww(@0BSnByoc7Rp3(8a z0qi8fGEE-09KM?V*r+ zhO0dz^`22CPnE^9wcWF=)3d$XQ!Q`QN!=(`-zd)1NMmW#&EBYovr#X1Bb18!s!1YG zvpn}sCl$#&k`ruVk-WQRa@3f|>b z@7)gXA6(x17@z$LpM$(llHMoZ;B!>%ov&ajEIvQleU3YQPP%;@a_Jeh^qgLL-XyKE zNY7cNzc{47x};Ya-#Kz$qVT=W``$G8-WGg+v-_#e<`H37THr5dFGJ)?UMb=_|+-=Uh;mg41R9}zqeMu_YS|0F2Da6xt1sWFj}>@ zN0@wvqRBRwZ<&GY(35=LI}wcvsq)5oa;?iZUXXijmHV8Q``(xPdHDN>`8(A9fvNsn zo`1+{|Iq#Z&9C~mtn*j+v*A}szM37$v&yk-^g=dfE8FHY+wMNQ!p*k#23*|Q3w@MZS%-h~GaZ|sOKpBWuX)w#<`?%jPtpz!ky^A8UT=o=Q46&AcGtm(F}W@o}$ zJP2#$86FlM9?>^knH3)Wpm`IMcZCpsSkLyig#TLCT+6pA6TG3KqB2;++nfn+mnLe3 z*5I?l(5(H7a5Wpz=|Gdt*L+U(iOAGP#N|g63K3n?n(eekbnoPSMDN{C@6!)jq$h_R z5j`J7^!AMG6CRn+H&UAw*)NUQZ4l|nP`m!C?qlg{m(>hGx&Uw zMRq!U%1qu7`{7QZ)*3m;Q<)mBOz*24oTVJPNI7hqQkUh!?{9ioF4tOoJohU{hO^x} z1@==kNwRovxvHFcUpdAzYKDJQR;Q@(X;InvQ8{a(CLV~Id@X9~i>Si}(qA2Xxesg# zIi~js_lO>ui#E#Id4>Wu2^2dY(`F{{I4*7l8ApB1xlQOq~n zVm6K< zX>HHvx2;;!_TquIm#($FoJO``ntGqZ4))3-4=3AhnxftHzU^*iwY$Bj-Gbj9G#z7- z^tZ}?U(@c7GwuF-&~9#ByNMo6MzDb{kaaBKJ=#~u+ds%6@txW~N^Ac(zkThR_D>JA ze}1j~KQG$5*$yu{b*NA4@H)Rk!p~KbW*MDv{UbmLAMTQ z(I%by(d6CsdZ+d;JE;RYck0|ZHobFPL1)d{&fN}n?s2_yua}+qfY`pBV-wS3lL}&W zYhzOm#tyh1JMd+!KA=llg7@K6=A>GZ{<2j@dY5^IE;0FCjH`X_>O~38OmBAOe)Cd+ zNpkrvSkqPPBq|f7k)NPk(2Z(J#9g0^+hd z$Bj>q%Pxq^Nhg~-`W;;pH}PQH-p} z=le$8wnlW@o=$o%WD@m0HajUz@3y0$+hM)W`~$?fu-lP5@A8LD=LsZYArs@@K2OcY zZ|mkM4?O&!dHjKHN{=Rcu6Nt}vYS1i`+?5g52bfMQqa9(ZTBA!c0Yc-`^lHx9RWSg zbnbC3y~p{29#w05Ts-UX%h?{kKJ0O&QO~OpJ+CM9yg9Dt?ZrKR+urk@zKt=JInuYw zA7^|1`LO4`M!oJw^m>@kt7crUzZUm;vc1={v%UU)*z4a$z3U=+zf9=;YFzI(i+jJ_ z-uwO8-X9}7eGt!eHG9*JhpFSM&GEyzN&S7y|(pjbFOc@M}0exgpQF3of8wfj8BMP zlF+p@q5HXno{ti`*C+6Y68sJ&^odMNh)qn)NbD5RIjJyFw=OZ|P-36J!~uaV7JTt2 zaS+j_MrzX&wS&iNhc3|$E7guTrycc3JBB2UjZ7Msm~>K}D6p-Tv5A7GN(h%daQU3n zCtWclO<0oD^ISr1Y0{)~eJ0;Xnp&TUfza<$ubF4VBgz>tifr%pzG+nkt_tP3(htrW?9@4ESZPVtu zZe_hLl}TP5nY=bJdHwk0jZ2chdE|3No_JCqn+_#!Ii39NqvUVvlfNe^->vh>H+gTD zr)-N&Da}aPQJCVlB&AQivb;29_qmiG9;NIf{XGNvABgRLD5L+8!u}QO`u}*S|M46B zPuBN$1P;i2=yMYDa!dOZs)SBb;Xp!JV5?;>q*v6s2Z{lUGm_2*CSGy+oLd)BIex&; zO9osh9pHUnz@-}lF4qrm27YlZ_KO=CU)(DEqI%sIzaRRd%LDOl80Q1E^om;w0)pK5 zfPc7WU7hqyJ&%9FnS?txzPMZeg)4C2gV=$OG6p^_99X+<;L}3`pWhhxPyIl5;Gh?= zgX%K|y)GQo=aJ7cw$%ehRo79Py=2hYb%Wj=8ua1DpihSe{a2rmUC;L@Oj%r*lD#A) zo9I21`bJv4#Hep#)_d9X*!#V!jx$d z+BBsxEjlPoWloE+rM0O{Ygd!jVS1uED7{mc^w`1aansW^>(jd(PVaFuz1ORBJ}9Ga zmyE>08A;PKbn7!x4rdHlPfl8sPby?}`xCksrWnU3bk@SY92hyHh4tk;88V$$4G{Zy_wLkWKh;Ce%vd*ckF=igNG!= z4(Mo3%wC^3!8|0_He`|{ZSu__Q)`B_e>KDuG&H}<(89q(XG|Yjw0`L9!$arZ96JBi zP$4LDQJ2gmgEN;-&n#Y_`Q_ov*6Y(+RA#1>4*5DLeS!8-<|@gs)yiROU-9c+@#~ec z4bz8R5r%!!B~crhxash)EjNdK_iC6mX!y1+!%GJb-!Xl7+4|wT4iDdRbNJp@!|g#M z4s;oD=rHy^5ZNp|@G(P_|DS&&`l|y?9_{aEjW}u^aqMu@!)tu*r?o0`M<>ER?h^P@ zP4nY7N1S{$!Vxs`OqY@8f+V7RK`d4R3C>93BL{SYLK9W@LkT;H zsw`vVc`bW*`pByFBQG8vdFkfJ%dbW{gGOEJGU~?QQMaa#s$M_p_rs&^+#Hn;CHXu& z+#G`VKd}=98mcQ#Y+~w?Dzu5Y-~8^YQLdoT54wzgG7#4ckA8Z1^z)me|9Lgq z9W>@emofFWK~VlWk72KZ63-fRuLlo%^D48U%doSGVQ<#V;M#b;r2wja&7J6;y&I436E!{|X}p#joit;-Zo~ML zBjX3$8b9#$cs*xKi!){%5n;8gP<7U%>K!|Te>BLCB%X;Ka8@zo?D)j&!-<1;ButtLIP#Wp^lPJm%g&0+9zP^Idq#H7hU|$)vM1llp87i56Y~vB6sP<@ zj9?RuL}gq@T%Hs1q9zo)_AMMTVaC#knM)_k+A(3y4m$VNg!!*02wcvhxSSt zJ`1~qr?%O3Wa6G%6ZgKJXy+y!h?@ij2Wf$IpzE@H)mep16gU4?AUPx&2yp1N^lR>xYWU>#xqTHqscqo-{)tOZ@f(Q#v~8U zW8?DzhvsoJ^FsdeNw)Z432%Q3>2D{8EqS3w^P1nzYxyQm5u6_$pFenrvB$ZDZbY>+ z62cBi@;xS6oHUK$-O+we-da%q0d&ipn%=ePSSzeAG(hArq6 zUl2RAAZ})XW@ACOqXj)~7xa2lzy}xhlPCV)*dsTS1sHC!K>99ICCrp0HVM!+iAkDS zsM}a*+*;WG=fW@kDjd{gdTR9a^!O0tk`!aCbZ4yeft#cpuN5+}WyVG5p^A3w8j=*$^2XBKUoIs53$xwmJ|e=}1EE?N{{v}9<} z(wRlY8;ia?TD0PJ(aJYPmf%@y;%BWJI%~tsStT21Z8|z@%k5d;y_vOaQA*ubVBl<7 z;OuSjvrC80-Z69bPigeD0YOuAz4i+WpKcI&~ z_TLhp!@yz+P z8|ObgI{*3Y`Tx9`?+#w@B7Q;r&;_q&E@%jD@_(N4zlQ>;K4XP=3{1SdaX}|G;@wW^ z`{+Pto+Q_w`EZo|_}7B#bqkmf!BZoUOrdd+Kud%iP-e-X?r^J?9xB(=v%c z{CZ#Gyo&C4aW{JL40|mWILRk}aw+vB&i$l7_{rs2CxseMt{groDsXC*{3$VcZXhKE z5U8wZtnw}uDb^uD5~#6H9+>&HLZtoNRX1MK~46bDiHF<`V8UwG-Ah|O%!Wmjw4DCk7?rt!d2*`qbjUVEM zH-vR9i#UWhC<@YfhZs5n93-86d&0TaulDJW<G)9GeW>9+##ui58hs87 z`+T2o*nlZlaKh~r-JIx!+3AHonIL+JwTogiPh!+rd`-oD%{6>!*1lH$zBc}3pfj}x zvDwf>)WH&CecQY_;mSnlCU|k#mif}VeH}RcAn$<7(qPG#)hHH|`QoAl%+8xZwp=5F zZ1r=Y`iXz?6ruSYE~Ad?Yq*E|d1m=J6#E_P_B+Ape^T7vTf^VS+TYLL|8$~%V3~h# zxBnT=(`Us`pQn;OoYd-Ma$A^bG%^3i1IZPJ;3v)9xme@^KQR%*%-Kt1G5tYbIStry94iY20aiD+P_t{SR<&^ zI_QyqPDf&J4<* z`A9Xv5}ex9&wR2zW991impnb#fMQunux60F^)-g6MrvVaMzhY0HJCy}w&D1Vibc^PD=9yR+OI=?m0{U>#V5Yxm611#Ei}%9_Pd_pIe`OZe!EA z%_HX|1oR>8^&xo_W7;k-1&ggum^_C>-0FuU+r`8&wd!4tqZ1q?%uw-*kA>Zd) zit?Aw|Du?EUb*SKiV?~^mqO;>t{G^@9)>rzX>r>UC+Um&Z+UD#WG zVSmpBlO)_h!HZ@J7cGn~T6$cxUbosN>7s4BT+ONmpqa#9Vx$btmo2+h2baHg?np; z``Cp0oen>p6dqU}9^4atX5rn;}}Je`nIei!G3RTG$jnD!`x(rS1~OZKw#6Kbm; zG3>Opx)?>;oWeUqxL|Yn(&@{WlP*V=Uykm%d}U$8AL}BnX-34`L?oP!NJ@%GDUV3) ziMZ*3+15Z!=ZIXvkER!hh6FL0B1lt9^CP7+C)7%9aS#Ku`m=TUN2Tr&R#9WceG<|yePJ^JgT}Us&)i^&6Rk?;$Yor z_|qKG^$O7qM$ykaqAdjN8!tyUXA{*kqJwA@OIR`>6_p6*vx%@2MYr`tzZi_}5RBI?eL1E#JEp%W=G{olfZ!Ea#n5*L*D$QeLl7le5F9{;RT<=O83ZW&I=#qv zF&>{VmO+IpLq=CVdt4d5d}TEI%2?BtuOnAjmdCOw#$t?P7kI|PUpc|%#BzITK?Kvp zc%YtCgbjU?fv@$V3aV}Cv6dzR6qDcLh_npCcBnft2t1>)iz`@{tpDRztv~n={jn_I z55eR=R#f~U-1~ULRn)q2lVM-m4PWYf|g4$!J}Z zJ9KSpz%>O=tfnYm+`!ta%!dlVEESvOlq#-m>%F!e8;4&XM+hK8-MF2hEe;!eB8g(!+ZqVl^l9IQ$lt(0El4m_hzDM{ zzyi0Q?K&s!dX5i|nc{T|@ca4%XRUM5`gf zHVe|2m`pLugaxtLh@zpN;O2Sh(5rwtPCXS+wBDLHL_HjkU>TO+nUip|IpH{VN$2MT zujPrS6cZW7iN2nR{t<}*If+5di6NfM)g4xPs0oL-X>kPJI6~17p$OD_02`|2rGzhC z1eKx0(B(QIT__s``-dgy*b|w&&5unSmKa#|QFc`*_@-iUcSKt6dVAU1Y5mPYvCViOiGUKs1U&k57su~t)O zMJ67*`%4D=)K$vV-#pgByXHIZ(roWq1>UtuxocZ_m)>{Rf$QGy8}2!OK_dzk1&j)` zWYS?U#6(FFcaTLIe^2@k+)JZ-Zb$C9N8aNg zlsH6qVwUBnwB0{4D~l)lVSBSL9?1@m%#O&-j%vw{;o5`}@WoIi z6Jh!CI)(Q7V7rJxwtYpAl+%C}-CaQM%MjT*17apSc16xrrJOihi_?2^t{=%sjLb>S z&AHK%llCPieMRnVrQD3Yxp$A`W(E32ZMyA1*1U&3%-=1e1C_`&xq}cVGobwwa^P6+?TU+wmzvOqUDCkrw=-OL=SQoqr zEa*uo=&LMv+gI?O>;8ui1R8YJ#CW`}!Uoy~R00Z*R%wLcIJ9GA2`vrCL2(4trS}Jw z?o&zkKiS^@t5Rz?^8RS9L5 zgyAp>98n4@#A*|{stOnN7xHpHILr6zktGlKlpieJ_W&2Ad)_90*_h{F;xbxc)*1f9 zOaZz;m5Shv2P>)`jFwP^`yYsK7yY)eXtj3H8oQ#kK}G9s6m6&~+SFep!Cfr1u~>ex85h~RkBM*yd(_}Ru zuPen7BzI7D#!=jQDMHGnKp37_QX2M}7?4U2FVt-|Dy1APrACz+=auejEj_UB_~uWg z2ZbJ*DL=H>_t5g_L+hxAhw>iUwLY{TduaZNEJaIj)1&y4Oq}I|gJ@38m(Q**)fHlY z^!vs~&f1S$?H(NtdXzz>D26@q%zJdS_0jRMM_xi@r}_lwU&j9 zm4ynGpHnU;PQ?s58O--Y6ou_8|9p~9J(O#wBSuaQSF3yP;?eT(sPc%s@~GDGn6dI$ zp^B@@6>4_3MNKXBp+RxQdN=K%9%D+kuFquTe*_FhvcP8f;caR-tiI< zNJ6l%fKQ`X@Hvr_mafmRTasy4c`v9k+fFAZuQIQ-vS6&TP^hX%xvFGe)x)DzWl>cX zc~w>YQ%XWU8{mezkJ(1hP{a_y1ruGg#xUYv7!T+Mq{N1*nz5>b9Mz9ER{y3@-LS9v z+0p98sOsjt>eklk_Oa>?p_)$Rny!5{nv&SNi`{@td>Q%j%{0A?J6E{Xtdf}#RGP*EP-;0qGFM7=oOii5$(>YSC>VWiYH2y5`e5? zgiT*NUty=$aRk>bOs(Upu3PlBj(5@HC7T}qy6Z7N{qeHk$AYPkS42-50W1kdDDV>d zK6mI!rRpLyE|eLH$xO$@m!_ZB1eOn=T$}3Xg7z$ZsM_PSi6*pDw}d zOhxgcrrc7#PBxC{w@taKSdLIk%4k!paPwW!=4-o}Db>xXZ<}u}YPq$k<<72_ zOnS>srcCe#SPwySsH}ko;JX%OhjL}=VByOt*$1)c6Mbl=dSNmhTQVhy-a}-PtcL3d zxhR8d{)!7qh@AsMxvCsl(JeXoEqQG%1>-G+!mUNyT1)n~K0MZ1Rz2xwXlL{!lmV(} zhmuX47dVEP_Ao=sTUNtdPNO)T0MI3iV`R^@R;1QfR=1v0EU13lTDz$2@us#XyV{=8 z+nxuvHKn$-RJXMWuLNzuYtc76q=NZn7Ke~5z!9OMLu&)5@kM#i#8HB|=Cf>TPurGA z@fYKQog>^T!(6_n7I&nIz1-CP=dSiw^!7Kw?LDdOeQo6NE<&*^1(rUPVqwIKpr;|L z?JiF-*rKh>AW6w-dy8o&#u327`}4)#(yzZ8Z(odg@nO@86CZcI_>|xBdC|_lf?tfJ zzW7r8V*KrkZ;Luu50JLYYItLa31S_;?CxN<@8AgOSeVuf%!|9dgXf(JFVD**n_vFA z`z62q%Vi-i1=C)BkfK1ZRf)*4qUNRa^Oq~Xz7$>Ad0n(~_3q9!_ML0r*^0+>t}p1^ z*xtGMYp3MOKRZUErEAz^cK<17|L4{ac=G(G5|5g4`=2Ub|5RPsrKZwFJkUj|nbx3! zSx@KM$-+*p6H6ZbRb7Q|ohiHHLG}X2U+PYFX{L4Utm)eIu8Yj`YL7i1-U5@)!oeoW zq4wJ=^};nZXK@>)UM<(8j4#zw93ph85<9)LAnif13&u(;A-Fe^#~GyJ4z5cyqrhj@ z!#iFX*uOFid1aLLYH!V}{qJ6x@VpM-du^uj+Ty@#%j2)DV_qLBcx~7I+Fk_>d*DSh zC>56K73q_pv^Do3E5mcc4lYG8o>7M1m@EZ+1)efF>{fPM`Nm1*jmv>IZpYua$Gq_@ zcyqM<&GD~qyjFIfQt4(K==MF{?H|((q!FA090gJm%K8?Iz*Au8DN6bHDPw}0lg>gF z9#GI7)ZQKPwL5fW&pDNzume38kN1Sf^h6Z&M78(CeC>%{*?U!`H|{_$Xyr9X{;)>_ zQa+LS;w2IjWzlZ7AM^QXK`4A1iskz5g9#zMNoj(*2Urx?gpbAgt}?|Y7xdm(iMBt{ zWKq|fnTd%eV%RAMW8U`O3~7#X!NlkvOu_cu+T3?%cVDJ`-@TAN7&vI|LnJb~s24s_ z0TAV=U0m7x?Ad93xdnv8lD>Q%q@X?h@^D|Fim2O){vwtBk^}t@kN20w^j8%0SMeOK ze%D{i^H$>3RQjK&)AUIN>Cunddk0^})~md2IPmt_@wbgJZ<`C=wzj`*|N6FL<-1Om zcU=eGy*~b~`|B!kK8~n-@F$H;{IZh3=(utOG*6>erWS*Q-t6{}u9nB<=l|n)l=H-hcbr z3;72^71BOTzM?E;1fHG7lSjMAUo41{pU99X&{D!t+>LdBRbt>5@&Hk9V8Mw2&MO1h z`vcrB26(;=EEf5|xBbIXlMlEP9|Yce3UJZSH|-I;`C&!v2jTZ0M0f{(lNel09$e!v zxc1E8x|@R=Y6myHAC%zzC?)Yx#(@Q$ki{ZJ48LG@J?jzz`aEn6#R{S}gP_c~W#yu! zDyz|=`BBc{1O@>G(hBU4WY26>velcX8N%nFg zp7$V*G5l!24a3OTVzQN(47B)ne;d+b{j^8olOFk#fx{=mGoOrZe%gCqci)Ro2flqe zDDv5C`)3Q2&z8LCS3cpzkKtd*ze<~*jh}^&g@sq13yu+7ot$X)<{k!mMEK??j(_>I zZ;ftY5$BqAUSRqT^LwIP;*(zzWo>jorElbyoRW^y2Z%}OE}{l{q81KzcBW3wbAj+p zfK0zkV2)#RLh|tQO+j)9pxVqckYC`q0Qxbf6d3oE6fSWNkYdg>i_2Wva!j5RnA(_A zA`3s8Hr$OG8b0|K^DmulSTGk03#ZV8^_Ua$|9!nAzwFcq1@>&ce^VhE0Ie*~Qew#Ld)c4U4uAYJ2qH5=$F&q&D_eIxuP*3)+mc%VwQ5 zu`@NJ*-e*#n|+O~jlIS6OZdKDqDwQkakQb?yG%bVF#Ggum>;TqmtpcV4!4D=xwI+X z#zNo2kv1KHZ~BRuvN2!;E*Bd*&BT%BWaD7L!jFX`>~5xZuCxggVO;HPX6TDW56qOp zwC{xXn|n-0=5lnhF{hcBnL67zPd~m8j?hdzXg|#coo4Fn>O`Z1g?7!RaStv$V3FWP!Lg+Xix5Azpd9=To8S*e;b+4YMsVYXd2r`=ksMZp zQwZ{&nuWQIg(9Br;A-z;LYnX%Q#+EK!(o%%G#3-1jkB4nlQVM&Ca5n@&4;w)7L(l$ zbhyDz;J+XP++J`aBv!}{6Ilcc|9hC%)A$8~3j`4sP#Zja`k-bz`sC<(7vcIBA{Bf{ z1TQ)~E^~BXP973^hC2kl@8Ave<^(Lf=F2({;17qLimVCCPr?RqUS#eQOtcd>>q;uU2%NozHEJ=M%$iK1dy!m1hIr#xA zZaAJ5iD_j;zLv5w2Wo6XH#0RmOcUV3TUuG0+S@=fw4W1rsKRERvHqCRnJH)zwul4Q z%z;$(vmu}R*ig`AlddG{-~?|g6x7tk#=%}-z7uomQ}{BRZ61YYUP{h+*MG?*Y6jE;r)vc{23&a#=r~y z2c*d@9E8H`qjQ0;o0(m(leiP>#Ux^Q-WJ@$E1MACaAD;7I6EK$*yvipUOaQlx_;#G z(Ok7uJf+ z6ExFTzrB^C2$H}b2{*gez z=o(pZ9jr)LwG5I~#T?yt(qy2A|G}VuPR+`0C|+6B!nyH&thTfG6QB;W;=I@pMy(7I zUc*Ecm?ThoP~^~@MI9_f@pK^c=B5G*^bXT3XtNi46ut5JlDX06r%?cYl@*uFiqzEs zcpVe`JA3*Y9)-dcj!)3jS;n24MgdgD8r->Gk*qcur0DTX>;5B)`djP%9ftzgy5DdQ zg%HN54ARgwF~a|hK%tm<1srqR^v8_O;!glM#)@OGAp<96k%*JB{~h{-YSZn%bZ%{a zCQqOO{JwYtE7IjHi^O;{Rrr}I{WEt$Ark`^%?&v>a{}NSY`6?Iq|rwf8Dubl|A`m< zd*Z}Y%y-31#pa<+pi#v>T;d8OF;Et{?kD?y;Y@(bJ5k>o5U(EpY!p|I)AyfbHSYGl)?5`Z#TaY3v|L5@5Un!^O0pDCeY{c9)4^!Evx z68jTT0?ARVxHwj%K35)z%4JIaXP$&2bO+Cq^=8l{kZ+7Th_vU)BZYY&9rT&G3ZtT! z6p5+nKQp9Bfd%>UNNoPU6!@Gr&AhLZ$-$DJMd~23k3PcqFc_egUr00p&Qj))5Sg zppXDJURRfFs5sGv6bRy$Kwq->9e6x`5Bx)4JMs9#cr`0L36HnJ6ReoW)YS0!UFa48 zkJm(h!v54x*kRsk1;_Bx=w(`miEz*g#DFl^CtJa71ZNP3r=hp)K*hid_B~PPov1jq z!>9&((0w&@pU6c19lcH+1mW@W=m&~{-$9g@kU)2LkWj_(1SURn6WyJ-NbRsWT|wH| zP|n(nzT1u}?QU&Er#Lgu6A!`t3X&2!5)$auYP!s$=IAF=K64kf10HX#q2*>lr??s! z${jKW7-Jnz35hK~<1@3u+-Hb^J&PIlC3{Nme z@ug9D=Q2*_ zIe!`yS5qp}ocQ0->o@36;SrfenPndX6i?d7&|M1V7(`m3-a8>0b$K=Y4U_gIFz^4_ z-|(ngsY#j|N`ZaV?9AzQZpO^`IE*?vn3U-ssG<{*LLyGdo5z1q)2Z1S8Se5hG9Wn` zlXT_G)hU){>LeRuLzs{qhv5DVJ0#p@*q;e9&3~EkYOGE=w2MwsGd0vTpi$NAP$lph z%=;yOx*s+AbpNNK`^I!Trtg~?%Gn#xDThp{YL2K6Ql(uS&FFjZ&N^E`70;i>^OOI9 zF+nmNWT3GK_gUx}8}4>ASGTh>v)BDGF1TtdD$nB(B&ENLZ>D|bkq7fmAj16$=4fg| zfhXhp=kXcBxtZf*#=4!YF;&abRNBrJ<`8cPF(M(S4F z8I+lD_#fl_*&mqkXfC5`Z9!6yp2z{r`JTFU8;gLbqp8#Ht~8fT=8le=Or4w@4vV_c hoSdOSDk?3zS#q-^RMqgD>VN%a;atJOqJ!6!`X3(-qALIZ literal 466531 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

o|k79>MG2-OQN-4!}lTusn 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�&oQT6?sU!}ewpO=8tOiSz* z8oAe*m0ig5KCmMgJ#8kdyKt_bXU3*9-ob_#+Y)cNb(m9sn2%uv%hm{{+T{0Jc3fp> zrle4L(`VRgZu}T`lBzSFVY|3fNBoHBH>e9qms6YPz&5jE2*g&q0B>Q<6PSeJ#kx|M zimfvJBF@swn??cDb&oq6t^Gn`4uKCAcYyJ~W!`gG&?(e6X`R_c)s`i2$gbThLq+@F zTez(<<2vI5h^doVCTh8Kjv+~yej`6gpO_ha#ma}udK*q(vVxs_>Ja7B(O`huXzVl zis6XcgIHlRJiW4^qnRS5Pz+M!iWf6OSRUG_Ogb(59=3{&&9VO^1xi}o@Pb`$#idX- zl;0+|k8;EQ^@EURz6fE@J4+!v%BRDad!5LAZVyxEmA^}@)cHoM(rnD!VZ!?2x}Pi&bd{B=<8}(s zZ&4Us+3ZC7C<-=U;En5Q4rt}oPq(KOU_KTG*P@b4h>u2OevaEo>E;$}ubaFZg0T9d zAAWbV^KY6Utubw`-%2mnox_qOR_G02iNJydNM7qd%`qD6+ZKJ{awTR`c;^a^wKTD` zEfYA!oy>Y_OKYw1P)oyd?2!L{$1JiN;}d1(Njn9$z*a=*j?}=R_yXUCKp7LpNE|$= zzF?R1#%>24Q@yr7hyc@JL@I`E#buopY*>?J>;{dMTAG*FIFaHl_Jb}43fNy?gNJq} z%~_Pe%*AmN*jzm%8X0&Kz87o_{HIR{t_NBB6dHh36I%gp+b#Xbi;OD!PAhr9)b z^mw3iRv@1Y(j=(-*CsqAx3mizGA-Y&Uj`aRf-H3@-&*0uUS5f??v^#(B?plD@o1>1 zI6Pg70ytoTKZgKPiQ7rWz9j{5*V7WEN&j-QN|F$eJE(W|F|!eBY;76Pz=M{o-cwyn z><~-FnOIJy7suoS#IlI6%!ix&FgPADr&$3p`7rcz49agIU-wA?D$BbyG0Hs%xv^JY zMI}&Iote0i1q0r`pfSrol81VJud4}A-#NfBVcOV2zd|EBU*X^37H)GkjddKO!Q%vh z4UA0HB^it_WCl2z+Hn z9gusl}D(}24LHM;_BdHjv+EWv!mkkwI_*wZY!q(np66CY491HB!LJ1I0 ztUBI_prb)%?I{TU;g0okEf^?p52p0SMy!rUS$73H6bnlQTF#&RvJ;lDy-$b(SnRy4 z1TelsIJGy{7dy!KskjBVt~)kYE1#Y`A_e>RL# zU6|jzv;=I>rxSAyh%K0>l@IP&2Est5*SbYdI1iKa33nd(u=51G(iS;i3E?_k_i)KA7DL~~15HEEk8Q@JY4@`Ep#jd@q zn&-mf+!*;O2QNPiW(SITfkETrh@MUqU5J~&`ji1T_rFsxfw#@2)< zcLk#k{42Etj^5vfoFHkkjhA7M$Xj7dsMCUA5AoBw<^t-wx!Vo_HLL<|^2Jyg^yy2l z?gn)|D#YjVijD398f&`I4ORQs&)_+=_aRK9w_>(Csx@{TeL4j{ zo_x$7L;XxpgC`hPpKV-pE^foMO)H7gWS3F+1QtH(eB<|oqWLsXZW;;;6|Z2cPc7dr zl6=&7z7w84)^ZKA)-N=J2Ax|SsoGtXb&=^d?kGVdr;7wim7g~(Be1}J#w)%Lj)wG9 z?bebgdJuIj1(cz zR;%osZO))b^7Kf}AwyRqX0@riA8glL1Cmnu%;S?akXA+kZx%TVEHg@cKb5ud>xF_W zVu}c!8YGd+a+EqnP#TiiKjz7tEe)0n9<~P2O(+3jdP`G{v|3Snjh9q;#9Q=Qj{E8) z@69CMciAjw`8|ePJ)k<`-5g42ktlv$#P&K-37eyiUkOg(X8$eWT#x_4t8muZUbbVW zPP_%mQQoxJaR=Sk?5mO1?DMTdVITr~+u#yOQ=W!X5h!P5#ApFsO1x|>3>I+-v=i0R4p6y6ABw!af%+biyCim0qz zZTCSx96G2jCIIMP<3T9wxDHe`~lPiP4L6gJ2261 z0_|19kJJYrnvo_xUK1i)y*UDOE0^Yn0@P9YrX9j$|4=@eMy=)6`Mt>eXMw{w1N?Q6 z{@F*GxX${)K5V>^$>(7|p)yfx8}Tv#gHW`lZcD)#80(bS zFynI$Z$wV4UxiRMLGCvA9ktas8ZuF_V@uYt(r`a__RMj#(K7 z6?jg31|}<-mBee`Wy`Vsn>TBCR~k(?iuptXn!V*5Q~#&lV*1b8bY!}`P|FSM|Axj% z1NW`&h*p2db0)=0ZHM>cqi9<;FIsdQVQFaRpWskT51hw3&XV?v5a+s{FW68k%Nq-L zM?;Ks`cp#3$*S^vJdJiOPGRUD8>XGYs?NxHDK4$D>~=Ahl~sRTidU;VtJgiK!fkK_Bjm%;M$MXtk~(G^yKJs?i}8w>XZ?xhrHIm>TmO&r1Le5MuD zZze-Cod6=UKy4xr_kXA2X(&}74z0)js6Sp~=zZ~*9*Lut(+pxGyJ-Wkkyx4eOGW?d zhgZwx85ue)M%_2UgJuUL9B2El_DC3Cc$*D(e)R1mvyoPspgIJqAK*{^ZO~N#y{h2 zQJP{jzW?8uJNUA#M{2DUs^dm>iN_^$)SZBPsZ?ysR8i3pX6beK&kc^aAA=J6qY%4c ztCAblPSFDa_-r9Z{@2DVQq#dXc0>ho2CzMu z&_=>KdgXzDZT%nd1$gUr*q%+Fo=n3g&vq;{bF}u!%yd%)tup2IB+%WNwL{o|6KQW| zCr+!(-?P!~pdT;#9T!t3e&`2>?cM_Y#Fbj}BcwWYhY`VP!fGu~^e=T`CNNHm3%z84 zA#2qTB+B$}p=OlSuS+0?%FXh_Zn}cWeieaXoacvRY&V`Yc+1!3*hQx8nC5FImd$N? z)z=?G&1?`VZuKvAJ(Vq^3$sc7IJ*m@{_abvmWxNf%z#8W*%N%ijdRreUN7edfk<5(>>JN0v^7Wv_SKsskznh+afG0|wLQt|m;?z8_#~4nDxe zOranZX-6nx#rOa=2j|g-;zW5VBsx;%p%Gz`>8xf#t+ln-N=A&uN!s#0m0$y=+zlD2 z?r{d5TUoUaOSQG!f31J6Gv=J3I&ad` z0z+SSgnEGz9Y>n#7&Mx4L(m}v6FHU@An!Rqj$;G3xtviW6h{YEGf9v7_4#00u19(7 zbjlzmcTa7=g?;nROCt4oyGq$OnKzl$f4e%CqrT47$V?32!MiVTke$5%DrVI?gaia)ZI^*Tk;8DzM)IBJh;xl=b= zb^_lNm9v9rc1|dZC-r)S|0wGRu~}Hkh2v%3;Z}nt4o9m!HVkt?vZCA~!LpRfk;m9? zwd*W%0+k(~V^MON0nwP|n{uOY5U^mmPlsH~k&auDlhcY-ipNVL@ixY?l*R*Dy{IkU&xj=!c|!^ixf@!Iz*m?2 z7HH!%gt&D|{@mtr01hJXIv19+}zGtNfxm>9&$BySX-KzO_`#~nc9x>#0v zu>M^fv$B_0(x`|KiVhRY7gpj$bf0(V4S}b2ImVo7jsp4#uH<}<#f7+E<1B&K;t4BL z;`%1bx=iS&EEZ&|X3~J&93|}ZXYN3?6C$Mz^9x9Dn}jX>@rq=l$~4v|_r(ZEJu%V@ z$HEzJnn8URm$@MdwEyx(9TiJDBaUKw{YOx;5Hl-25gU#)$1qJCZWkiVAG9x~ME#VB zg4lnz*fv#a!CtR;z(27@-I$h{x&_;Bai3)0e4NOT z6KdO+<$Fn|rkJrUPz?00m51&yPd$D(ME1GpVLW4le;pY z{U_~@fNgvBU1k<(wEQ{j=H&+iBq#dt|AqahyvwHka^DVM5qNH5FEbV}Za-v)xb7gf z&bMSLud7BqZzEN;q5JI-OmV(1 z1*rG(w{{iY@g#hc`}ke64%zW~8c;>eTY$0Ps32})Lu;5K3GD+Za0T%xvHaUx zQGC0kOq|VXj7?Vlsucn-M(FZ?8Q8QB6)=J?dDpGe`X;wJ3@f31^#WFHv8FATu2j$| z6Ynfx^P&G7+k=^vRjSu=o9K$e2DeCC9hu5|E6`R;S81|Q1UNo~4H)te`zCkz-E2j| z_+W{QeC|p&_-&ViJ^SrEY?X4Um1F@pz-@^_Uq92}JEPAs%K3B{OcLdjMRqGuJ}|^r zkqiB@L~`iMEIpZ04r#8~GeKQPi+7zu3gaLrSgz8&SBJSNU9sn+8w0!p2}W^uHwwn; z2(EB?8j!Nh7A^PVdQS$&RIxb@N7pZ5m%Hx<1F1t@sYN8^o{$j8M^7a$s&W6pQn{-A zuz||nt2laYY(Fs2!HTSONtud{IO>@GHkO^!uRrd%W)#b2J0A|mYhcw4x0l)~y^v(M znuD0+M36caIlG6r0yo(NdgmUSON+?c95Y$DkR1%A{@&N_gj@a^lhCNFzg1#^TC2kA zD9Rp|@C=M{4`rleTkiL0m5t2?WMKQg>gm?e*uM5S?6Hk}QV#MSeL(*5*5Rz_@T*aL z5j?%(?q&s6PZOyCxB$bj-|`kS=!NU?4HH2N-gblTKG_ClgHIQ-QAPPG)kwZ8grM|p!EZ~&v+X43iZ@OVTiO29f-bv5xD$UMK;^2{DfT-kPc{qT<^FQR( zx}|4jqoCY*2CX|tQAom=r5(;+{kNhStl9W21NXroD@{Gp2^YMr00x|#yI$gr9z zwS-=zTFLun?2lNGC^1oAkKaLfmRr-Hi{z18Lx|uV`4hqXnIp_Tc-s%nIM6q%;;@Sk z;Cu3!h#gk&C+!fx>EUuKC@eoB1u+LaL-17NT!Qxk$^(W;pyc0M@d;rSCW^pZ{@cZ zhe>whEDH&3(SV!2Hefg9wg*9ZIC99$_oHrn(1E2CgBO2tdx&flY++!JC~lDUtr5Vf zQx6N?6Erw+a=u8;KWDJUx{L`LO4Vz<1P&P8lUZ$3xcral9G=E^gw^Ce`oSHbzM>Xx z3;JP_cw#Xt%F=wwi%I?%b{76lHQ&Z!hTKQjG)MYW6 zZPfAuZ^m`1_6u=P`;D2*t!_kgQkf|LN>1%;M-L7Ca(FI^lf0D#T_}U62tHg~(qEYFEO_*jG{Y%Z}y*P)6qSA~vOY29(gvzL2KA z{d<^x70o?Zt%R?~|Dg4`N@Wcs^RZd+yRgkgr(~goj6;qbF;jfpw#`IAu zE3e{Y7cg8Y_4^oprj*|;K?QVSqu12&x9wpNZUzX~_r`d$1zn{)v&_03!K)}>mJejz zq359j8u%*+iDNqIGJC0O_YH=7?K~2Ke4!uyS60<_Hk*&6Y8MUOay}zKbJ~c!zPdKK z^;S4VM_p?v9~VeLeL%)gOXa6{JnI{9VyaPJ>Qwy4_>lpNVM%oe@hP3zFLgU!o=gET zeEKtfN~D|mHve*!x1JEW!EMz2m-&4N|V^$v!0V%_k{9H+58+Zd)(mjNYU;BVt>h#I#r zQi8|c(9sS#las*$Zt8Cj&6IK-GO<%!&866X#krOVw*45c1hB6hje}PDC#j?V80PYdhxNRI-<>??$Dx<&4$=w+AUH9|QQk*` z{~p!&sO2g{4QoGwRZnIX3ibfiO{)Xyb{<(LVG$=5mRaoO`)XnUf)SK6R2erPt5bd& zi92%(@1ag>^w*jI1W(^Ag$ye|fS{zV1nc`fAqS6Ic{q~@-AsrXmrge7&%2nDzK$I6^h!8XttrIOO9kxa5*W<|tJWHE;qF#0iGsR(6(Lgo_E$ z2U=xVZvK!2G6OfvMQ~E8o6*2DMsSXy;=@ z(0;LB4`4B(F%_-=pp2ObF_XN)_Mzqh(UIa(6L1nXF{*Bi$QqGL1Y1jVo?Qtc>Uwzy zie7?)1xsyMO8>xv4jxZ+Qcv0d$pthG);V2!5HBOetweb%G-5@<8^Lue8}dacnfT6x zCT$cDdq+_2-X%e8N|x3UY#Ai6gLlXPB;a^O1j6k$20kk{7JL}@WMU(j65sIwKpP*g z%m#{m^E2w&$OT1X0(gR05(7#{^H5C3o!Ibkr*!8I@;!mfP%`wW>)^tfO_9thALaD` zaom5GA+pGI)`0W4!L>mhYKuQ}RRBHPK_R2xK*)*2x(M85t=dJq6#48*R68E)V&5|08Rwtux+7Q>o|0g2`()rY7I#9 zr>BwK9a-hLZRYC|Jqf-es1Imt%M)e+DFFY-;W3cBVu?(hE2AZPt-`%Ll!6%koqa42 zmwmD;E})CG=99H);?xQjw#(i_OH``cx{ zl|micvcxj=>zTNahyGd?4s27vS_L9E*~sQ@2eTOTN!1TBH8yJ8_OGO;+c$RCSg57k z_YBFtRO`TfC!MV)1*y||%kHI|{3ia*_1J5+pob*s#~O}K^dl0x_-Vd{EU653_f@xq zKwM8oBNbQWTF6FipDtroYgNJ9gxY#;^NWOAZOCa&M(hzBMq)MP`AF0$#M^N741ssp z^vwc^Oj#s&-lbiiG|Ir;4qawSy~XE#4|R@y19#(g>A^ytOd*JZ>ODE`AhmqC8?W+& z9v~9m&7b`omCIeh4(S%4(+>vnIkSt3FJ41t$j?suO~Bl1h?aBWdnCAir1JjvnerX7 zgE!R!j*hd5mb;z10Q4jSNYe&1zQYGYVIVgZ`w%ReEyY0pk4o^@YB}uMD_5WzM$7&C zT|tTrxwO;GQRSm|7@cJ|wBzqH4TwLgzYDhYC@@&+*J-)a^A@FKlT1}GHK2owF+si} z9sGJE0*pl5EhGk!E~P@OIjzxjkUc>o`!2BnWmkUzwpQ`h_q$M(>MC}Tyt5iCVfj}$ zX!($VZBUi@ngCh`KftTH$j&-eRU<2rQr>C=MXuC5hcB7Ve~vY&*Y7Z~dy7pc>Xtx) z_}Y3OytkLlLW{$-jl@T#; zB9g{1W!w-()Uk6En4y+hM$SB;{B05s1$QYk3#)+vl(I&UUCce3M}=a*<|v_{fl$PrO$IYdfMf z@bQjRKKY!F830)L288gY27XAZ|0b1Yle%N!DJebsV>c6L4ur6QmwzzB{EnVuX#?Ap z1@0VDa2Mt4ROg3ziWJHvHiaeeK{p7n#L+c=kY--guSXC0wE$ zj=8-z#iUiLrB_RFXqBuP!!!>1?q{>y5n5$y3xAv*t&$Gf81(HURC4G}v&jdhR?DH< zRmcAjgI`>gH#Q=%@vME(bQvi#F@RXQWxNo$OP%=>-8hhVl=U-OhSmi42a69Oe?Sta zg@ld9rez7is-#gbJ{#h%;cgZeJu}gc zdb|#!z_sES48E(t0VXsLs`)s^*b?7FfewV=zg1Q_cHtvNPl3@O9QAn$!|d1hDhZZN zEyd%nekW7}wANqjQAmf35LUXiundInpU+W(*K|Dy;EPs%EPcyKdp5k*9wioxzGaWW z1zf2jx&AYbmTPbm_Yi3lmZ(S!8U>5aQJXcznf8|V$EaMRJ#oo8#n0Gl(o%S|J&)7ss1jtD>V4&ERAB)bvQU1*;X#$em1*P zHvVC1eZ|E-2#yOl;RLANYtBf4p?rF+Mz0m;ygv?0^Sw6_fAKB-aya|K)v5jQX8Yqw z9^N=@4HSKn(HtH}X}4emzWsPueTanlZ#GA0kjU%r|;EQL1W z)Zyo4+?Lag)Zs_E@dSU0_pXdro8w>XruSAge14SH#V0wt%HcKmjvlXF?>EK`wLhc4 zL{(pEvT5+>YkZvSULHSE_B_Ooq;h;EC`Os}HR9O5#V*@8-yXAD}^8kMjvVK`z6+TT*6v{k+gBV*&%w)oU@A}c_5^zDXo zQ14@%Cas!|iw@zux->Z+(AVUx+tdGGh}Sn(L*_^^xoVR${DL0nZV9mX(c0 ztt=xES7lkLe1iqGqjS@kiv8{yp2%CA8>Dp#GqLL7J6hvP%9#g)@D^z@a{}8%aT|te zww#Rmb8_N5)@~a#30f>zZ7>Wob^D)Y2awSQFZY}}~f!Ym(M|Jyt4 zo?UVkTAbMo|7=n{S4Xtp18Pn&g8#j}&5$M2y24^S_EM9hRaPzSii;ii#Eexw+50Yg zl(bRZ@y2m~{|pHD$QTq3xmx5}>B97;Z~(-b5Vzi52oW|f#7os*a$Pi7nMG+nf+38e z>sd9h#D%mD7S||hH$v6-(D<~R^>Qt2)|vBda3AmY&DniUjLc<^+j>Q+N^@>>#A5qD zha%tgrzWDsz|g)p2&+C1ywc=2Or^vhxgv>e&V%`V@U0Xh$}UHnu_HUnXK^IJGol?i zs3i!Q+ugAp?(x&&EWBp+KzTWx`Bi6jKTCs;*!{fkNZBy?#v)7b=0B+sa$N@a(vRob zvuh5Tjb@9ISCS1u$Y*XvE6=QGWlY)o1T<5u#R_INOnT@p(gt1k75qVLa5Ys=UM2it z6bjZi7hr_pim{BFe*W|m+)^FA&5m0tY7{K5ZkU9fv1JY|&Ze3FI`A#oyLlA0sZJli ztW}>yXM%ep-w*X?gBgp4fd0An7Z1kI<3SNAr(B<9?s=oi7I^;!X6rcJ;T*3u~+;B_M zvgd+AYT}YjW{N2_lp483rS?)sA+^XYG&NF3nOq{XLNj}rqhKy%W>jXBj^CNwsH~{0 zexK{_A7+Mu_wKv*+;h%7%je@R@arv+3Z`A6pG%$7b{Hgt)gmnrI&lkrjV*+*+|su) zL40tfk=|yejh#33q7hi~bzgi#=MHKz)avX_&d&0+g z{Do3y0jaYwX(Ra$inu46`wm=I_3SiD7Em7j@ntK@q_e1Qf6fA3`d1P@Os*IFIbLjj zGPJBH#2vS{F6YI+yqKyGyM#UXfhELQNZ{3L--v1@Hhwc4q5W@T1_Dn@qpm{oqIdc1nECPk2+vIzUt|YpOYh1!J=eww<9_lV;fNg? z;e-SIs1v`dldVpU@s{r?O2KYE6HfBjhQA=nr6V9)z{W6hGL3}eUN#W2eE3B?!!R?{ zEy#%hdd0l56?N+-5xMD{uAyOj^d7npg>Cn4krDVTR0+1bGw0J;I@SvoWQ*W?NNz{u z(9;ZaqP}p{X$Fv*6$4Rpzg9ym8q{^7TDskjh%>2yGM$;{PF)gSbHdO8>zEue-V!g? zzIkdvYdiW?r&~1cx%Uj}!-@suq=gCBCQgx6l`hQvNl2r4T15sYmFr z9J5Nw3y`6CxVrYOWK((W(0Pbq?tvd6?&`-laVt0EGCl2k(qBsJE@Dd$>WP|u`e?7s zNS!W*V-yIA`snG${fvTB!d{*?6cuGSQ&HfFJllv9I5{X^eTAz9_5%gTV}=H#zmm2x zlqep?rdCTz6gv1F9*F(>Ek0G_4<{+`k1a=z3FvI4hh)U<7NtOkg#Lr~fh9h+i5uu7 z56NBxI8y=(Afn)Nu}k^_sbyhAsY`5LvaUskfpQX)Z}-6fDb@-PGTtv3baz1lI@P3cf+i2#xnO#iTt3vB=DZ1h%?vbJ6t=F`DsX{Af`91I~r|+bAao z70;`cUTQa8V0py8>QR9RP-Kxa$;~TIinmff?ZaE@Q!8+LZ=(~Ua9L?0f@R6Ow_U5Papl(@fM|l=Wk)1vyn!meGgg6Z|?(_wU3!@u`pt%AQq9R0*Z?m^b z-tX$R4L=Hf2CNo4an%HWkkkj{vU(H)sZ2fE zG*CuN`q%}iFR0ldRoKN$Y+Y@s0r~G%So?SW&=vTsyL(r-(1hDVG^R3jxj#h3&*{sG z*{AjT*SEuOJ=PRL;%X_n@8j*O@?1mv2S_Pmhfa$Y9Pi8`OB@AdQD=y=F7u&24NqAT z03z>EktxQnCsdFklw0?zP<)o+dHRN&2F(~2K z1$Ty3$!dK%HN89mi0a#Aj$Fkh?4x*7nQ`KKomQ^h`!+l=*SiZV0#y2KB~;+)fs(5M z04D}JQ>Y<$4_t?_W%FAzu6-18YCPAiuXtGdn;&41u}lM9mV2HzU|qD;2e7VczV!(3 zk#0sf0QuaQC5eN-XjQha@{6x|A|8A+Hcy4wc64g{BK!kG!^fR5r1o7t7uSqaoGR?y zDSR8)N|5HKc2vi}@cSP2-8)Z<#GFb)QRKPftyd#O9-fUpfKgmn@*6&HE;eC!J@>{% z$4$?47pJ#)Pnd5&D8cpJ{5K#StG>Lk9zPcSF?c(EFgEKLZ0m*DI1G`iK0-9#Y^=>v zR4Iq7%VQ8P|7)%<19YmHI^5JTSag1=i^lj9{QA=+fj{W!D zv+#*Lmp4n1MttgMz0b=NyRKWTJeogN1@5Xa zkGrRXznBmE41M-=glcO22EO;j?ogY@?}QyX@TACoGT$t$j6IY# zP`m>SO~v*;Ix9EN_#7%W|IQ*G<_;ZoDXdPa19Y7x{Fky>7@fKl<)yg+wFp?YP8Z0v zSin1IAKO&&%)^{6TUVuUmaUJ!e|$o&G0^ZDER(wS4u6K;n1Y#A^j;}}67>dxaOUbS zP(z9|dbF@O7R`yJ`d7v{)E_dEhRH4!4DjQBfsJ(?O9MK8js=3;CHl5 z8)L=q$DUd&a!}S1hq&PMUn+0}z3&c$rb-{qSJ`>#{Gcwv%@5A3O7O%{H!Qh1e${E` z_US8~u;;ITh47!}@m^R?^OSv9d_eHarS-_O9L`Cyz28ee?Wn9FR~@&P^6$w?J^sV9 z11x2vre#B8Qtu68mb4?705&24)1v(&3jN=oht(WbzcxqKonaTxjr$+A-?AUvA@X#G zG%cDD&QarR+CisRi{(^TU6EWUz&-bs5A#3OC|Xg~AFHq!te>ij7OO?8hNC`cuu*8U z!w29>wK@k?%W~JTvWBmm81$i?k_#5k{=Fb?cJ&nE#@^POsphZ~i}`*l>`rxDwOgg4 zL;4^M8!B>}>f(8b?JzUy3`qGwwwDONLu8!xOsWK0#8tnQa@YK3GJRt+lU)m&skn*F zO0ki0fm8B4syc5xay!17zY4eM#x}SJgIv(Tt&ibuyGA|{R3F;%s88bt&0OUH_Dr=7BGI=G1Say`m*PX;Z}Szn;X|h| z)#k@@|=CLe<#`_3d7Ww zk6Ln6)>wdxC0@40$iA#np+rSGN>Nea720Xk!D;wrgD!y1?H?^>)CsS5Lf0I<c30Bl^@$IRAFHi}FqF)#ru4&ZxzP&U~N6u=pEIu-lk%km$G0UG&FD?kXcJ&fl+$ zQJL8vAP1uT0MEC!pk^=21tV)bJV1NCM2O^vUb2VNx(wzl*25zRK)rP|OBpw_v)F@b zMI$KX*te%)^%BoSFgUGftUw)#?ILWK*pSb4DIP;*BNk-lMfeSYtz)=9p< z%L&18xGbCnf_!n=!iKLG8F}MQ+p+7}_vZv);6f8*sn7F%sKCbsZ0R8bT)txp)ar+C zz#}sZ<|0dou-DXBm!J z-9EDz08HB+TPJpJPYm7gr4R3Tbu%nA+!#77l|p*nolpe@dH$qM;pQ`w-7zZshV2*| zGSw1-kF*e5*u41%Cye6a5X8x=yk&tXKO?rb_WWHwh+Ig-sy&|jFqP~DQQOIS&cMu8Mhx6s1=F9lku9&P7)ul|D-O*Bg@a?cWZfl@yVr)EiM3= z{Eg{g%D8ZW`W+QK5#u&m;;0&VU7w|8zo!i};dYpvAJ11Z8dV>{+;0|080eh`D{@#F z5QZWhogp7C;gN(ZuKv48PBoxEw>lwEb4x6FfI1(qigE9WR!|vp8e*@ow|zM9oPE6l z(tm`fYbbWbT}E>Ym2rA@2R5hr_Cbpmm39?671iBQ3{}hbz_DI?b2i-JEKU?$TN{Uk z&dpe8QBWuFGImpb&WDn{KDW<(6zv`$RRymkWsbtZW~ZV09@?l(!nCVD+Z1Z`jyq4y z2I1LrrCWVjoRCB_0b4QmX1%A?TLtl+Fugj#l{0m1Ub^R?XhvkuzX|oq=5McplAU`1 zlkqCBL%7=b2)-NJJrN&N6LPQ-C0og*OvW)T#paQ*nYR#mT3BumUbRgNI?(wgR z7$zKL>4GteQ7gBUK##e01k`luifX-?Ju2r>JaN_rBXa}FHrHQ}_ZSR%1e(T)2~~a& zM?GfM*D93C>SNU63E^W5TV5GKZN_1!xf(#VeFon4iUbK(MD{3rxwU`k5jAuqox7Af>5 zAlH~|;(9V3uFR70HfT-no!GJJvI>2O0z-5j)XRPkajTB{koc$#XSmk(cldlP@i&B3 z!EwF;9eP+_O4=LlIM6T!>>BIUQyhxbqxU=W=mKhiQvypE(<&{J^(Zwz1*5D2y0j^| z#c4&&y{W@N`b;+;#w!=O6>`sn*Zoe)qM_O*ck@a^euWD2{(2Vvi}v|G)KqD^^#*|3 zRAH%@!z*+GV_mUpd43o5S0NKeWawo>Q#YfU2mOeWSaIfL_rRqA;+&nfgk*a?3Vsb| z_5g@okd{ADf-R(6`o);PHnNi+UjA*BrS!m>YCQd%!9FZZ@9o%%?4Vf! zyIySAY{?}T=h}T7Z*Au9cl#e2)r$??hHXU@bj6QXMJII6o8Uv;dkFLo`zv1xz~t*w za#C3f-hMi|&sy+k+eMIp#v5A-Od<1rgXC$+gO#-qa-5d$IH^k!J1O$xAbBt&a8WOZ z17m8qD1fZV;C#*xxivDb#AB6hu1tZhFr1}TLu3b3*D?WB7uqIg4b)--1l+K-vxj{E z<*mLT8ynG227i*KE`iA%G^a911lSV0aGQYeRq8JgrxfOO3Oq)TT;h~krN<$m z>CXsXl}*uucCsZF$$M9&k>V!A?n?i$nE~mVHPX?JavbjK8i5Ub_j$bo%!t@P%rl_$4&(wA8s(ciy(zxTM2!_$_L_#i$1ZHff5;X55;PWO#l8yH2&1Pxd$6| zEoZ=A?2%Sz$p%Qp>X6Mro!)?MSasDI0p!wQ%;(4Z*lG;5wX|vjUha4YFAesJgU0WI zBg{PAUk3GE8v~`YsQqK#zK8$i?v@2Hf>J8O2udEb+u4H~3YA4gh9i-eN zvWidF!-QCG)hB36NtK4?+cV8tyEt10x^mQ{%vzuyN^hn4JMnKEN+@4}Tvf3Rk>lq|A~=f$+mPC-1W4hlafVVFz#(A^1+7Nzd&F>I zdoSQVxmp-+??~C&lC=N9FHyxp$Ihnnq;#}lFW-vyl)D5&fqIus<1DZpnw(vRm%@^r zOky08zvuwTX=K+AkaiGwFKASxI^z?|L8T5U`@c>4OgheyLvM_T~bEH+c4CP z?kKTNolDt|(A6q+PLlRCo+mO7*Xi3CeCrFu{M<7~BhG<_XWdw-a(@s5 zTcSf$#^cY!ocWQ!OHa!(Nl46BcqW#GePs1;<=iV`!X9?R=a$YPp3060&02G@GD)6= zX)mSv$`RCg8xeJ4m-IPgd)^Scb~Y|@J%Tyi*Ezm;uQi~<~DFu{S?depKNan-q4*!Hr?$YZEme!L8Ca?dB^eee!Q4NAKaA5#;j`!s)9`mW<_A++gTU%# zy_qGZLE?vJ881O#ZY|!pj0>_b#&8Fo+};>_zuM)J^d zD<%ayFXA>*>=kznMFyqu&$1FLij>mKy&YsV@-(_!dTgo|DcsGKJc+DSnk$zC`4f6Qmj|Rm%4h zOvcItf0kHx8-zCz&<9v7jG26{5`#Z?+`)PdFD3gNy_JRZQ97)XGYv8Eas|?q8l~QMZ|tddH3Ix;se+VPZ=t^RO^5$}zdngsx8!QOev) zHqK)c3t+>FtxrS7e}t9F&CRM z8(zjPTq&>&mgDcv44vaivKoY~Vp%^#QW>j@LEx7`90Lg1p>7a1liBgjsNY39)(TiL zrcBE-ZFm&&6kuh`qwIcMw4DtTez+0~5-$m|F;GkP{lgRN5Z;chT#mP2(W~s|bduB! z7~7d}mJWX{(16*XG$JqS!&v!&*wNn!+#1c~&JY_|i5<2XOPqUiS{Zf;WFWWP15%tQ zv1w`eq-UmCS?A+kyn`=~5jBa*e0Q9d))P3BfC`fn2HJU9(oou6zDaOaeJcyxD>ge` zmEvl4si^j6-8t03x5Fd_fvGz>N>(&UMArx`AT3-iWwFOjbrezIaekD`D(M(yD)0;e z;6);)bXRAE&6AUQa*Po^gyYt5k{UN~$LMme$^x+u1ZzauYfu|ndn}4}S)W4&6#IjH zYAOIPrWTUbSGM-xxxf`mobpL*dBabBD45myAQ|EUC@kLyB5!{MTG~(#lGv(~2!h-R z65~cB-z#TY(%A21wJ{x-C_5zD)Bw9m9dwhzC%YNnnX*cF|9rR~LC%_57X_N7GgLYh zvQjC_N-;G6#auB;1WxL~uv`Z(J6;fJn2K$JT#zkj4DGR`tsHDkpS&$)C5p8~8((p5 z*Otlk1DLK>v!$}8Jkz|36a^sV>_q}qCNTU>No&eIv_Sl2-%ttDZFm)7Oc~)>3ovRa z=9cYfG@sQ3uCMvw^^(~@xvqND?Ug(txePqN=MJ0_SWCeuq^5tBav0yDolxG(gM#%% zEx$zq=)IchAOT*CEs(wKxf1yoeu-k(>@4NV^Qg8!_kT+X?Q>eg3sM51v$l;zT$rIb z9bHwEXF&O_H`o;V1jwn>V4uxJf7-=*R&;{Y1{Vr{DsTXL>oUX6S{0G44XB+ttb#<$ zlHux?$HZqJ$>1o!exD&*+tG-N;t-e`XDY47#=~K1)f~&WZZf8G{m%mAx@L(!PFc{6 zHlW*o)>}!^>B^u!RH%-~MyTx5Hz3>RryyFZ_M9NcWEy{6&d5~skp*cDXT?9DDs{^LFUi=(3Ice$h|lS zYxVC-?i6k5C#OnCz29ah>+5)P*j||1{GZ_r+6dAxp4j?Lxs)Y{_cu+&_Z)WBm z9a<5EtNMT+$c&FkQHT&dh|B%6&u4~YoE9;j;L@9H%Bw2P)c^U43~FqW?j&{F6$aF4 zwxg~)kydKZDj`7TMc2JCEMg6v;(C(FS91!9%1*(xcz3-nNa{JEB)wLANqtMUf(84C&5GbYUh;SNk=(cl9XAO5MVp=M(%AQSgo@dv18q&S|b z)A0KVxyLa$S$XiG|LiJ z>H2(sklOKZfV%9qnQ28!cu<#@;&BRVVZ3+?eBU!0%pM>zw&K>m%33ivk4?NjT8x8m ztS_v$WpVh@Kox$ETtGO>iK&S`jyuLgy;1G~Xq4h>_$|7>60DE^KwS-b34iWcDXEal zV?|I}*5~jcB_roh>a$qfwXQosng86-VISB+Wc)#&p~!Ra70OH+mdxjlz@TBVJiatO z5{E8{rQt3dO=oE42B@S=BiX^}`@wF=!b{--IV!{!ywTVlpwAn~8mgckf^b|qQE8xN z&9G4?c7Z6F)hANy-5F<#11blSGDE?$m`r%SE#G5}XHEB8 zX-jup{G1;%GGS2IOy4aK+0$&1-$7em(3|Pl%lZ%v8-QW&xkHbco|MkAa{_uV)mQJL zvhhfDa^G#`S=w^LT_A3Q&JV3kBM=?J_g3LzIGR0%xj5YsqFYvCb5P?0e)t^+Va;+j zS%Dr8SE7oV^`bB9BjdH+5wnraM1qHRBOASDjx zhOcFNd-`vupr`XbH=$ZZY4%ph*aFDvH#>0hp}y5yX<;Qz~pQb&G1P6nSQ6f^EiaGoQj1L|?0QkT-xWs%{N?Nin*yb6Q{-l%MrR zDx2hnQELo|H_s0z5a5QEVryi3Q}V2k4Xw$nh7HK@Lm<=z2y4)m^ZF#YzQmV8*Y$aD zbm(K0Z&C@za|Nz8_&vXoj#Xf7>Za2M>bnb?!2Jat<-5-@!W*r9ac=MP5G>}hw~-LZ zjhH8uT5-;lc@Li7U=$49o_7lP_?*#Bq=@^!h=qx)o(Escd}xMvN6R4M?CG%=4qKwz zI2a+uh6*;GWJzrqrIzTkjLC+3z;ipaJPA+>V|9#c+m=Xi8`?dNN+C2?E**?(Y7MSB z5q^GcqwF!$zB{EFWPhKo#9aNop*GL&Zs-<~rWvaR#)A6vD%?!nXv8af5fMKMA1#lA zS$&Pal(xL0HxU2Bl0|p|63Lz-g z?8n$b-boeMXy!L2`5ej#WeuuH~M}qG8DpkX?w-Ub3uo;>S005W!{AI86CGL+REG%e8CiB4` zs2yr*(=_bkTvDKx2LGuIkf(vaLwH zCOi5UEC19Nyw=L~9hi!r!}(7*Zu_IP7nwt#rx-A4IL};DnPjM-_{B zshwzAR0qtihWGu(C-6Mfm-fl|5*pSBvO7_MKgPZys481RVmOd}IUjBu>yM6C#P0HV zE*?oosh@N_!Ip;2^s9)cz_~!{ZHHP9&Ze?a=DAfDopEAdVMIuIXC4uQqf7Ll%l*c0 zpx=KD+i6KXk?yVTt;4YTb;Nyd8w=STd<6!b*kP1U-Ws07ion~~Vjy^)i z2Kqtpr=jqfW?k_^KZM+Nim}QJY;n9lc}J&91@nlRyf4Uh1Iw7~-N{=I5)&C&nLuY( z8X>;j7^&lFB$ZfhAjAk|N?vN65~z}&^+K&E&3f9#sO&iWv9mEOx!O$B3r>GbP`>>8 z1WfVN&5%2*iuuTGmlXg`Xn#1dIj8?rorCRP2Tq};{sN5{fGtD6hjGMd1#OlnNjoS$ z6xRz3f!Zl8z=LJlV@_<2`k2(7b422#=2i=eXTrxtnqE6LUrJg~J!!w;V3_OaTF?JbPCaik+VQNGfZ`GqNYl=#m}p=l6UdtZuTOAnPjJ1|wOs z2y%=_DBMZ!Z#dAQEo-+g3y`+AF|IZ`Uy8HLLWG#LW)I1{9i4kx28JB?b`2zrcPHqB z(?a4e&J^~m-wZj!$#u=|rS%6Zjqn^xd(xf`C~Kk8Q-a^6>?=zQu+AObDT*jQDsO*yH+a7Yf9(^)1Y@i(@@R;m@Q3wxH`4D_-%X`qc z#|vREeO6J;P)eFZSY2J+vm6_t9pcGon@v;|pn!a`w;7nD4NwsOiOMi$H^ofMBdg76 zLkG!IT&y%I8b2w{mB$WO2hdyfj+|>sje1oWz;F4PAav2bH0$7HCp$A5dqKqX@9Hde z+lMtb59kln6%p*G`r>R3fSv|62XZj?NEq$Ba&{P^;3pxXD{hDMz11A5P^t8L*)OI<6I%Z$+>*n6osgudA3_2@ z+~~tV6aT=^b*+GUnKc2<3M8_uIUQ@~*CNRi z5H0V>aFCKI3@_AJRC=1b31y|W77;FGsK7neGC)luz6dv2)7M=}-z?H=bg+xf3bs9c zf#&}P>G-s#-cE*Buo~V&vSI+?uy6xrEej)#)*B82tJVjRpppYE(e?UsxshtdVXGKA z=~346q}V{wMfy_8?!%>`ZS*dxc@>u$zZie+I0;p8$_0(L{y*Hqz5(-^Kj6k1_7G$Q zo~Gg}(<`xYyHsW<`G+aeh^>Rp=-1lKDW+f|V>*m7S(1*E+7!x0Yb5jLh>OWtkdWCS z_TF`VR3{FBHaUA8%W~+ruBN znV8$;83;vSWoIiJfFSiBBfe0@u&^2d}z(9xsAhphA5esey>O#_P7nu$AP8HM!$jPFu z$lh3NbMy0Z0ili=See|5a=a0Fz7sUnJ4zw_zVYEwkw`JNA!V^(9aOJD-65LnflAgO z9S!ADnbfwXh=u)z-OnbQO7)=pjv^>kIIBZUZoRCuwB84;KcapsmU-jo0iFe`o$_A3L3(w5yF4?=FwBad9>C5fS$4a@*+;Db|lpnxT z$GgBE)gJp-3ijgGYwu&w1zA%2aYOJo$%8EF(?-d42hWu^Dv!Y-tM+Hfa4)7f#@q;! zhviZut^v#k<*oJPYzf6` zv4aXf>pc|Em&8qQ2tykTt)WHx`6S+`*gLV^3q>fDS~cE+oPNm>q0HmW?hrWH8VkWU z<9y|IDOR5+@;7;YuU>*?Nc8vzNg#VW?477AP>K?%@1#Umut_{D0L{E7QNmEKI5CwL z6a~03I$S~#wby-BhtjPFAC}Aw(7-v+lH>tHOT1-xrwx{^^tNYkokCpzcr>8AB=dWK z0lp9h#&!HxCsf3h9LzksrOVACtwk;o{(PhhJfL%TLAm^P9|on~*4>GZw0{SuZEa^< z=jDz`Q-x+4@uE};Fum&oM8~&b(Cs=zYg-?aqRjy=JyMtC)^>mE3ZQW)gWJfy8i6me zkHeB?FJ|BEU0#I$SE$9O*-?dip|KJN5r{YhfsT{f9mW zuNmGEgFJiTBUsx~%^?+f^TJboEx}@C)LTo6H10YjU|W+#7cJCs)POjorhT|rqF7LB^xPe@ZEY2kYfhA z_O`I~r{9oDQAyo?BL<|L_6q=B&3sf+@MGvNa=e%>|Ah1RrkRi%HaCh{`|kBVa2H699uj*(DHX?* zM6+RV#WSvFEMBg)0n;n~@%JF9tSwiU3g8yCyjq9rqz~RaBDb|*LSx%1lT=vhwvzdT z@X9a$C6_j!(({!C+N7c!1&yB2?{&7pWj)gtlAPPrQ_SnCj3~gGH364UZ+Txr*^2t$ zP(eY?+Q!5YX1G!0p;&8>S0RZpb&aevBJ&q=ye^%860ks|W=&QEHwVZ`koA6MO0{SH zbX-t-BGFK>UG!XCzV&9I?Cm0+Rx?1f*`2N@(gWs4MNOI^En<|hcio6Q+F-psipUKF zFQ-+Ci2Q#njV)$h0KI;Cy&p~TZEaTiX|ag1@)qe3PNE1dQsf_aJ#40k5ox_dE0{70 z3er0p%K~Vp?@{C;K!L#9s$k*!tnxt`x0vE> zY0Yc!w%HU@z9og$`*W1|Qy`S5CcuY_P4*-IDT1i>mrcALyH}s2eUr<*0(vj4uui7v z0|E@wi}Rbeb+Oj;^@sXv2puZ(L`n+jW` zUV5$~&sEPkd{TAWD*}AgT|ZS6`1;8rI&${@88|THn%Sj*p0|s>UWI_!hnpc)+Nm^T z&k-AdbCvb^A4F|XQnd5~d{-cUZXI{pm*c}ek)@hm01Kb&gWxPbUmgc^X$ERp8~VGH zbtA4asVc~oiFQf36Rm6~pmA8CrOv~13$N=u#cD<6`qo}la|_BaR^GfCfClZKfPz+E zU5Lq0{Oc@6w3q%_VE{~{1A|hWUkLTXmH-E*88^%n@jd0^XGGfem$y(G#T=&6F|;&_ zDJU*f8mP`o6>-j#F|rx$ep8)6;ggD#8*Af_QKVYrW7T`yF+pvvg7vi;A#kS3N)N78 z-H+w`dZ5tqkv(ugay4?a0nO53rL(nyIK8G$I7X^SRG^&{@ptw0$`IvZek*z{-5GL? zg_LS7Dx>uCxpL^)k1o37Y+~AqqKbP3;Rs-~GbQA>2M%p!q3FQ^-%xdeYe#xnqUhlI zqB24KdyA+0WSY~ANY;NsRhU}h9qoTUm@{Se_b`sEt7xx??b$9FhM-WhkL17_e|t!L zYTaE@av1mSTO{TCgA`uDc35hG}|*%^nic^3zjH~TmpD67YgH%3E%LQ&-Q>(R-*QlvRVm85(JfTUMpaSWMu;=FdR zut%8#Q^oJntGYZ_&wnJg^IIpYFyO)eK@q3d`tTephvS*lF`5qRG!a-kAh35$#_{q| zDGLP7MK`(44&5fIUIQnF>*8GN3O2YB%0DZs2-~22MdjWpqpOlYje1YiU*>xEzuCI? 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

C(`5ij6`zRt8Iu7nk*-!p{*8!d*f7;ysN)%i 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%0Dtc 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 _26@hAo&@1wxWxH=2eLm* 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