# Vercy AI instruction - YAML 1.2 (JSON-compatible) { "vercy": "1.0-draft", "publication": { "status": "published", "adjudicationStatus": "reviewable-draft", "publishableCanonical": false, "generatedAt": "2026-09-03T21:52:36Z", "synthesisSha256": "c21031d4da17f2c0982c8ae672acd2dd6277fc4afbd60cbaac1dcf8bbf825853", "providerMode": "single-provider-waiver", "providers": [ "Claude" ], "waivedProviders": [ "Grok" ] }, "metaModel": { "id": "WM-XCT-032", "registryId": "vr.wm-xct-032", "name": "Currency / Monetary Value", "version": "0.3.0-research.1", "previousVersions": [], "entryKind": "mixin", "family": "World Models", "category": "Cross-cutting context", "industry": [ "Cross-industry" ], "domain": [ "XCT.MNY" ], "tags": [ "currency", "monetary", "value", "xct.mny" ], "status": "published" }, "canonicalUrl": "https://ver.cy/models/wm-xct-032-currency-monetary-value/", "sourceUrl": "https://github.com/ver-cy/world-models/tree/feat/mega-model-registry/research/runs/wm-xct-032", "model": { "registry_id": "vr.wm-xct-032", "model_id": "WM-XCT-032", "name": "Currency / Monetary Value", "entry_kind": "mixin", "purpose": "Provide an embeddable declaration of a monetary value on a host object: an exact decimal amount bound inseparably to an identified currency, with declared precision and rounding intent, an optional valuation date and conversion reference, and explicit value states, so that an agent can read, validate and reproduce monetary context without inferring any of it.", "scope_statement": "WM-XCT-032 is a mixin that a host object embeds when it needs to state a monetary value. Its boundary covers four concerns. (a) Currency identity: the code used, the authoritative catalogue and published edition it was resolved against, the code's class and status, and references to successor or redenominated codes. (b) Exact amount representation: sign, integer coefficient and decimal scale, canonical lexical form versus display form, zero and negative-zero handling, monetary intervals, and explicit exact, approximate, unknown, missing and not-applicable states. (c) Precision and valuation: the declared scale and rounding intent, the valuation date, and the reference to any conversion applied to reach the stated amount. (d) Governance of the mixin itself: ownership, catalogue pinning and integrity, supersession, and tombstoning of declarations. The model is never a currency master, a price, an account, a ledger entry, a payment, a transaction, a financial instrument or an economic event; it is the monetary field on someone else's object.", "in_scope": [ "Inseparable pairing of an exact amount with an identified currency reference on a host object", "Currency code identity by alphabetic and numeric catalogue codes, with the catalogue and its published edition recorded", "Code class and status as published by the catalogue: active, historic, registered fund, testing, precious metal and no-currency codes", "References to successor or redenominated currency codes and to the catalogue amendment that recorded them", "Exact decimal amount as sign, integer coefficient and scale, with canonical lexical form distinguished from display form", "Declared scale, declared rounding intent and the digit bounds a host or profile imposes", "Valuation date and the reference to any conversion applied, expressed as parameters of this declaration", "Explicit value determinacy states and monetary interval endpoints, including explicit absence that is never expressed as zero", "Governance of the mixin: catalogue pinning, integrity verification, supersession and tombstoning of the declaration" ], "out_of_scope": [ "Allocation, amendment, withdrawal or reinstatement of currency codes, which belong to the ISO 4217 Maintenance Agency", "Publication, amendment and supersession of exchange-rate series by a treasury, central bank or market data publisher", "Country, jurisdiction, legal-tender status, exchangeability, capital controls or purchasing power, none of which are derivable from a currency code", "Locale formatting: symbols, decimal separators, grouping, cash rounding increments and localized currency names", "Prices, quotes, fees, invoices, accounts, balances, ledger entries, journal postings, payments and settlement", "Financial instruments, cash-flow schedules, valuation methodologies and accounting or tax treatment", "Arithmetic execution, exception signalling and rounding-mode implementation by a numeric runtime", "Enforcement of policy, runtime evaluation of rules and the storage or evaluation of audit trails", "Digital-token or crypto-asset unit identity registers and community or complementary currency registers" ], "boundary_notes": [ { "neighbor": "ISO 4217 currency and funds code register (Maintenance Agency lists)", "distinction": "The register owns allocation, amendment, withdrawal and the published minor-unit values; this mixin only carries a reference to a code plus the list and published edition it was resolved against, and re-states none of the register's lifecycle.", "source_refs": [ "SRC-001", "SRC-002", "SRC-003" ] }, { "neighbor": "Locale display and formatting data (Unicode CLDR)", "distinction": "Symbols, localized names, grouping, decimal separators and cash rounding increments are presentation owned by locale data; this mixin holds them only as optional labels and never treats a symbol as an identifier.", "source_refs": [ "SRC-007" ] }, { "neighbor": "Financial message and payment models (ISO 20022 amount and currency types)", "distinction": "Message profiles constrain amount digits and currency attributes for a payment instruction; this mixin defines the monetary declaration itself and owns no message, instruction or settlement lifecycle.", "source_refs": [ "SRC-010" ] }, { "neighbor": "Exchange-rate publication series (public-authority reporting rates)", "distinction": "The publisher owns rate identity, effective periods, amendment and supersession; this mixin carries the valuation date and a reference to the rate used, and may derive a documented direct, inverse or cross-rate for a monetary calculation without becoming the publication authority for any source rate.", "source_refs": [ "SRC-012" ] }, { "neighbor": "Host object that declares the money (price, fee, balance, budget line)", "distinction": "The host owns record identity, record lifecycle and the business meaning of the amount, including what a negative amount signifies; this mixin owns only the shape and integrity of the monetary declaration it contributes.", "source_refs": [ "SRC-008", "SRC-011" ] }, { "neighbor": "Numeric arithmetic environment (IEEE 754 decimal formats, general decimal arithmetic)", "distinction": "The arithmetic environment owns operations, rounding-mode execution and exception signalling; this mixin only fixes the abstract number model used to represent the declared amount exactly.", "source_refs": [ "SRC-005", "SRC-006" ] } ] }, "sources": [ { "id": "SRC-001", "title": "Financial Data Standards - ISO 4217 (Currency codes)", "organization": "SIX Group AG (ISO 4217 Maintenance Agency)", "url": "https://www.six-group.com/en/products-services/financial-information/data-standards.html", "version_or_date": "Accessed September 2026; states the January 2026 List One change for Bulgaria's euro adoption", "source_type": "registry", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:00:00Z", "relevance": "States that SIX is the official ISO 4217 Maintenance Agency and the only recognized authoritative source on currency code designations, and names the three published lists: List One (current currency and funds), List Two (fund codes registered with the agency) and List Three (historic currencies and funds)." }, { "id": "SRC-002", "title": "ISO 4217 List One: Current Currency & Funds (XML)", "organization": "SIX Group AG (ISO 4217 Maintenance Agency)", "url": "https://www.six-group.com/dam/download/financial-information/data-center/iso-currrency/lists/list-one.xml", "version_or_date": "Published edition attribute Pblshd=2026-01-01", "source_type": "registry", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:02:00Z", "relevance": "Primary machine-readable code list. Root element ISO_4217 carries a Pblshd edition date; each entry carries CtryNm, CcyNm, Ccy (alphabetic), CcyNbr (numeric) and CcyMnrUnts. Evidence that minor units vary (USD 2, JPY 0, BHD 3, CLF 4) and are published as N.A. for precious metals (XAU, XAG, XPT, XPD), the testing code XTS, the no-currency code XXX and XDR." }, { "id": "SRC-003", "title": "ISO 4217 List Three: Historic Currencies & Funds (XML)", "organization": "SIX Group AG (ISO 4217 Maintenance Agency)", "url": "https://www.six-group.com/dam/download/financial-information/data-center/iso-currrency/lists/list-three.xml", "version_or_date": "Published edition attribute Pblshd=2026-01-01", "source_type": "registry", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:03:00Z", "relevance": "Primary evidence for withdrawn code identity and withdrawal timing. Historic entries carry CtryNm, CcyNm, Ccy, CcyNbr and WthdrwlDt, with withdrawal dates published at month granularity (for example DEM, FIM and GRD recorded as 2002-03) or as month ranges." }, { "id": "SRC-004", "title": "XML Schema Part 2: Datatypes Second Edition - 3.2.3 decimal", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/xmlschema-2/#decimal", "version_or_date": "W3C Recommendation, 28 October 2004", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:05:00Z", "relevance": "Defines the decimal value space as an integer multiplied by a non-positive power of ten, permits leading and trailing zeroes and an optional sign in the lexical space, defines a canonical representation that forbids a leading plus and requires a decimal point with at least one digit on each side, and defines the totalDigits and fractionDigits constraining facets." }, { "id": "SRC-005", "title": "General Decimal Arithmetic Specification - The Arithmetic Model", "organization": "IBM Corporation (Mike Cowlishaw)", "url": "https://speleotrove.com/decimal/damodel.html", "version_or_date": "Version 1.70, 7 April 2009", "source_type": "first-party-doc", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T09:07:00Z", "relevance": "Publicly readable abstract model behind decimal floating-point arithmetic: a finite number is a sign (0 or 1), a zero-or-positive integer coefficient and a signed integer exponent, with value (-1)^sign x coefficient x 10^exponent. It permits numerically equal but visually distinct representations such as 1 and 1.00, and permits a negative zero (a zero coefficient with a non-zero sign)." }, { "id": "SRC-006", "title": "IEEE 754-2019 - IEEE Standard for Floating-Point Arithmetic", "organization": "Institute of Electrical and Electronics Engineers (IEEE)", "url": "https://standards.ieee.org/ieee/754/6210/", "version_or_date": "Published 2019-07-22; approved 2019-06-13; active standard", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:09:00Z", "relevance": "Authoritative standard record. Its published scope covers interchange and arithmetic formats and methods for binary and decimal floating-point arithmetic, plus exception conditions and their default handling. Used only for the existence and scope of standardized decimal formats; clause text is behind a paywall and is not quoted." }, { "id": "SRC-007", "title": "Unicode Technical Standard #35: Locale Data Markup Language, Part 3 Numbers - Currencies", "organization": "Unicode Consortium", "url": "https://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies", "version_or_date": "UTS #35 version 48.2", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:11:00Z", "relevance": "States that currency values should never be interchanged without a known currency code, warns that the same symbol may be used for multiple currencies and is therefore ambiguous, and defines supplemental currencyData attributes digits, rounding, cashDigits and cashRounding as formatting data. Also notes that CLDR's currency set deliberately diverges from ISO 4217 in both directions." }, { "id": "SRC-008", "title": "HL7 FHIR Release 5 - Data Types: Money", "organization": "Health Level Seven International", "url": "https://hl7.org/fhir/datatypes.html#Money", "version_or_date": "FHIR v5.0.0 (R5), 2023", "source_type": "standard", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T09:13:00Z", "relevance": "A widely implemented monetary datatype consisting of value (decimal, 0..1) and currency (code, 0..1) with a required binding to ISO 4217. It deliberately omits the comparator element present on Quantity, and requires implementations to preserve and respect the precision of a decimal as represented." }, { "id": "SRC-009", "title": "HL7 FHIR Release 5 - ValueSet/CodeSystem DataAbsentReason", "organization": "Health Level Seven International", "url": "https://hl7.org/fhir/valueset-data-absent-reason.html", "version_or_date": "FHIR v5.0.0 (R5), released 2023-03-26; code system URI http://terminology.hl7.org/CodeSystem/data-absent-reason", "source_type": "classifier", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T09:15:00Z", "relevance": "A published vocabulary that separates distinct reasons a value is absent - unknown, asked-unknown, temp-unknown, not-asked, asked-declined, masked, not-applicable, unsupported, as-text, error, not-a-number, negative-infinity, positive-infinity, not-performed, not-permitted - demonstrating that absence is an explicit assertion rather than a numeric default." }, { "id": "SRC-010", "title": "Generation of JSON Schema Draft 2020-12 for ISO 20022 (Technical Support Group document)", "organization": "ISO 20022 Registration Authority / Technical Support Group", "url": "https://www.iso20022.org/sites/default/files/media/file/ISO_20022_Generation_of_JSON_Schema_Draft_2020_12_for_ISO_20022_2013_10June2025.pdf", "version_or_date": "Draft dated June/July 2025", "source_type": "standard", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T09:18:00Z", "relevance": "Primary financial-messaging evidence that amount and currency form a single typed pair: ActiveCurrencyAndAmount and ActiveOrHistoricCurrencyAndAmount carry a currency attribute (Ccy) typed by ActiveCurrencyCode or ActiveOrHistoricCurrencyCode, and amounts are constrained by digit and minimum-value facets. It also shows that active and historic currency codes are separate typed vocabularies." }, { "id": "SRC-011", "title": "schema.org MonetaryAmount", "organization": "Schema.org Community Group (W3C)", "url": "https://schema.org/MonetaryAmount", "version_or_date": "schema.org version 30.0, 2026-03-19", "source_type": "schema", "primary_source": true, "authority_tier": 3, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Defines a monetary value or range with value, currency, minValue, maxValue, validFrom and validThrough, giving primary support for monetary interval endpoints on a host object. It also permits non-ISO currency identifiers such as cryptocurrency tickers and local exchange trading system names, which is a documented divergence from ISO 4217-only vocabularies." }, { "id": "SRC-012", "title": "Treasury Reporting Rates of Exchange (dataset documentation)", "organization": "U.S. Department of the Treasury, Bureau of the Fiscal Service", "url": "https://fiscaldata.treasury.gov/datasets/treasury-reporting-rates-exchange/treasury-reporting-rates-of-exchange", "version_or_date": "Dataset last updated 2026-08-31; quarterly series covering 2001-03-31 onward", "source_type": "public-authority", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T09:22:00Z", "relevance": "A public-authority currency and rate list that identifies currencies by country and currency description rather than by ISO code, publishes a record date, and issues amended rates with new effective dates when rates deviate materially. Evidence that authoritative currency identity is catalogue-relative and that rate publication and supersession are owned by the publisher." }, { "id": "SRC-013", "title": "Decimal Arithmetic Specification — Arithmetic operations (quantize, compare, divide-integer, remainder, round-to-integral-value)", "organization": "Mike Cowlishaw / IBM (speleotrove.com)", "url": "https://speleotrove.com/decimal/daops.html", "version_or_date": "version 1.70, 7 April 2009", "source_type": "standard", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T10:07:00Z", "relevance": "Defines quantize as setting the result exponent to that of a second operand and raising invalid-operation when the coefficient would exceed available precision; defines compare as treating numerically equal values with different exponents as equal; defines remainder and divide-integer for residual computation." }, { "id": "SRC-014", "title": "Council Regulation (EC) No 1103/97 of 17 June 1997 on certain provisions relating to the introduction of the euro", "organization": "Council of the European Union (EUR-Lex)", "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A31997R1103", "version_or_date": "OJ L 162, 19.6.1997, p. 1–3; CELEX 31997R1103", "source_type": "legislation", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:05:00Z", "relevance": "Statutory precision and rounding rules: conversion rates adopted with six significant figures, inverse rates prohibited, triangulation via an intermediate euro amount rounded to not less than three decimals, and final rounding to the nearest cent or sub-unit with exact half-way results rounded up." }, { "id": "SRC-015", "title": "Rounding — consumer information on cash rounding in Ireland", "organization": "Central Bank of Ireland", "url": "https://www.centralbank.ie/consumer-hub/rounding", "version_or_date": "national rollout from 28 October 2015", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:08:00Z", "relevance": "Official non-decimal cash quantization rule: totals round to the nearest 5 cent with stated endings (1–2 down, 3–4 up, 6–7 down, 8–9 up); rounding is voluntary, applies to the total bill and not individual prices, and does not apply to electronic payments." }, { "id": "SRC-016", "title": "Eliminating the penny from Canada's coinage system (archived)", "organization": "Government of Canada / Canada Revenue Agency", "url": "https://www.canada.ca/en/revenue-agency/programs/about-canada-revenue-agency-cra/federal-government-budgets/archived-budget-2012/archived-eliminating-penny-canada-s-coinage-system.html", "version_or_date": "archived page, last modified 22 June 2017 (penny withdrawn from circulation 4 February 2013)", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:10:00Z", "relevance": "Second, independent official cash-rounding regime: cash transactions round to the nearest five-cent increment in a fair and transparent manner, only on the final bill of sale after tax, while cheques and card payments continue to settle to the cent; direction is stated as a principle rather than as fixed endings." }, { "id": "SRC-017", "title": "Extensible Business Reporting Language (XBRL) 2.1 Recommendation", "organization": "XBRL International", "url": "https://www.xbrl.org/Specification/XBRL-2.1/REC-2003-12-31/XBRL-2.1-REC-2003-12-31+corrected-errata-2013-02-20.html", "version_or_date": "Recommendation of 31 December 2003, with errata corrected to 20 February 2013", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:11:00Z", "relevance": "Normative separation of a reported number from its declared accuracy: mutually exclusive decimals and precision attributes (decimal places versus significant figures), an infinite-accuracy value for exactly stated numbers, and definitions covering rounding, truncation and decimal-place correctness." }, { "id": "SRC-018", "title": "Peppol BIS Billing 3.0", "organization": "OpenPeppol AISBL, Post-Award Coordinating Community", "url": "https://docs.peppol.eu/poacc/billing/3.0/bis/", "version_or_date": "version 3.0.21", "source_type": "first-party-doc", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T10:13:00Z", "relevance": "Implementation-level evidence of precision tiering and residual disclosure: document-level amounts are limited to two fraction digits and rounded to two decimals for accounting, unit prices carry no decimal restriction, parts of a line calculation are rounded separately, results derived from already-rounded amounts are not re-rounded, and a payable rounding amount element carries the residual explicitly." }, { "id": "SRC-019", "title": "Commission Regulation (EU) 2019/2104 amending Regulation (EC) No 1126/2008 as regards International Accounting Standards 1 and 8 (Definition of Material)", "organization": "European Commission (EUR-Lex)", "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32019R2104", "version_or_date": "OJ L 318, 10.12.2019, p. 74–78; subsequently consolidated into the later IFRS adoption regulation", "source_type": "legislation", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:14:00Z", "relevance": "Endorsed definition of material — information is material if omitting, misstating or obscuring it could reasonably be expected to influence users' decisions — establishing that materiality depends on nature or magnitude and is a judgement made by the reporting entity, not a constant this model may supply." }, { "id": "SRC-020", "title": "IAS 21 The Effects of Changes in Foreign Exchange Rates", "organization": "IFRS Foundation / International Accounting Standards Board", "url": "https://www.ifrs.org/issued-standards/list-of-standards/ias-21-the-effects-of-changes-in-foreign-exchange-rates/", "version_or_date": "Adopted April 2001, revised December 2003, amended August 2023 (Lack of Exchangeability); page state September 2026", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:15:00Z", "relevance": "Normative source for functional currency, presentation currency, foreign currency, closing and spot rates, exchange differences and monetary items — the vocabulary behind amount roles and the requirement to translate at a rate tied to a specific date." }, { "id": "SRC-021", "title": "IFRS 13 Fair Value Measurement", "organization": "IFRS Foundation / International Accounting Standards Board", "url": "https://www.ifrs.org/issued-standards/list-of-standards/ifrs-13-fair-value-measurement/", "version_or_date": "Issued May 2011; page state September 2026", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:16:00Z", "relevance": "Establishes that a value is defined by a measurement date, a market-participant assumption set and a principal or most advantageous market — the basis and market/scenario reference this model carries without implementing." }, { "id": "SRC-022", "title": "Lack of Exchangeability (Amendments to IAS 21) — completed project", "organization": "IFRS Foundation / International Accounting Standards Board", "url": "https://www.ifrs.org/projects/completed-projects/2023/lack-of-exchangeability-research/", "version_or_date": "Amendments issued August 2023", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:17:00Z", "relevance": "Confirms an authoritative case where an estimated rather than observed spot rate must be asserted, requiring an explicit estimated status and disclosure rather than a silently substituted rate." }, { "id": "SRC-023", "title": "Euro foreign exchange reference rates", "organization": "European Central Bank", "url": "https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html", "version_or_date": "Daily publication regime; page accessed 3 September 2026", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:18:00Z", "relevance": "Primary evidence for concertation time (around 14:10 CET), publication around 16:00 CET on working days except TARGET closing days, the EUR 1 = x quotation convention, the information-purposes-only statement discouraging transaction use, and suspension of a currency pair (EUR/RUB from 1 March 2022)." }, { "id": "SRC-024", "title": "ECB SDMX tutorial: using SDMX-ML to publish the euro foreign exchange reference rates", "organization": "European Central Bank", "url": "https://www.ecb.europa.eu/stats/ecb_statistics/co-operation_and_standards/sdmx/html/tutorial.en.html", "version_or_date": "ECB statistics co-operation and standards page; accessed 3 September 2026", "source_type": "schema", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:19:00Z", "relevance": "Documents the EXR key structure (FREQ, CURRENCY, CURRENCY_DENOM, EXR_TYPE, EXR_SUFFIX), the meaning of a key such as D.USD.EUR.SP00.A, observation-level TIME_PERIOD and OBS_VALUE, and attributes including OBS_STATUS, DECIMALS, UNIT and UNIT_MULT — the model for a resolvable rate reference and its stated precision." }, { "id": "SRC-025", "title": "Extensible Business Reporting Language (XBRL) 2.1 Recommendation", "organization": "XBRL International", "url": "https://www.xbrl.org/specification/xbrl-2.1/rec-2003-12-31/xbrl-2.1-rec-2003-12-31+corrected-errata-2013-02-20.html", "version_or_date": "Recommendation 2003-12-31 with corrected errata 2013-02-20", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:20:00Z", "relevance": "Normative treatment of the unit element and measure for numeric items (section 4.8) and of accuracy attributes for reported numeric facts (sections 4.6.3-4.6.6), establishing that a monetary fact is meaningless without a declared unit and a declared accuracy." }, { "id": "SRC-026", "title": "Precision, Decimals and Units 1.0 (Working Group Note)", "organization": "XBRL International", "url": "https://www.xbrl.org/WGN/precision-decimals-units/WGN-2017-01-11/precision-decimals-units-WGN-2017-01-11.html", "version_or_date": "Working Group Note, 11 January 2017", "source_type": "standard", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T10:21:00Z", "relevance": "Explains that accuracy attributes describe the range in which the true value lies rather than a scaling instruction, that decimals='INF' expresses an exact monetary amount while decimals='2' implies rounding, that units must not embed implicit multipliers, and that rounding creates component-to-total inconsistency." }, { "id": "SRC-027", "title": "RFC 3339 — Date and Time on the Internet: Timestamps", "organization": "Internet Engineering Task Force (IETF)", "url": "https://www.rfc-editor.org/rfc/rfc3339", "version_or_date": "July 2002", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:22:00Z", "relevance": "Normative timestamp grammar requiring full-date, mandatory seconds and an explicit Z or numeric offset, and the interoperability argument that unqualified local time is unusable across the globe — the basis for separating valuation, effective, publication and ingestion instants." }, { "id": "SRC-028", "title": "Regulation (EU) 2016/1011 on indices used as benchmarks in financial instruments and financial contracts (Benchmarks Regulation)", "organization": "European Parliament and Council of the European Union (via EUR-Lex)", "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32016R1011", "version_or_date": "8 June 2016; OJ L 171, 29.6.2016, p. 1-65", "source_type": "legislation", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:23:00Z", "relevance": "Defines benchmark, administrator, input data and methodology, and places governance, oversight, methodology transparency, methodology-change consultation, input-data monitoring and cessation procedures with the administrator — establishing that rate determination is a referenced, externally governed act." }, { "id": "SRC-029", "title": "Foreign Exchange Rates — H.10 / G.5: About", "organization": "Board of Governors of the Federal Reserve System", "url": "https://www.federalreserve.gov/releases/h10/about.htm", "version_or_date": "H.10 weekly release, country data updated Mondays 4:15 p.m.; accessed 3 September 2026", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T10:25:00Z", "relevance": "Independent authority publishing on an opposite convention (noon buying rates in New York for cable transfers, certified for customs purposes) and stating that past releases are not revised — direct evidence for explicit direction encoding and for divergent revision regimes." }, { "id": "SRC-030", "title": "FX Global Code", "organization": "Global Foreign Exchange Committee (GFXC)", "url": "https://www.globalfxc.org/fx-global-code/", "version_or_date": "Version last updated December 2024", "source_type": "standard", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T10:26:00Z", "relevance": "Global good-practice set for wholesale FX published by a partnership of central banks and market participants across 20 jurisdictions, aimed at a robust, fair, liquid, open and appropriately transparent market — supporting the requirement that pricing components remain separately identifiable rather than hidden inside a rate." }, { "id": "SRC-031", "title": "OTC foreign exchange turnover in April 2025 — Triennial Central Bank Survey", "organization": "Bank for International Settlements (BIS)", "url": "https://www.bis.org/statistics/rpfx25_fx.htm", "version_or_date": "Preliminary results for April 2025 data; final data with the BIS Quarterly Review, December 2025", "source_type": "public-authority", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T10:27:00Z", "relevance": "Authoritative statement of currency-pair reporting convention (both sides of each transaction counted; USD on one side of 89.2% of trades) and of the instrument split between spot, forwards, swaps and options — evidence that a pair is two ordered currency roles and that instrument type is a neighbouring model's concern." }, { "id": "SRC-032", "title": "IAS 21 The Effects of Changes in Foreign Exchange Rates", "organization": "IFRS Foundation", "url": "https://www.ifrs.org/content/dam/ifrs/publications/html-standards/english/2025/issued/ias21.html", "version_or_date": "Issued standards, 2025 edition (HTML)", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:07:00Z", "relevance": "Defines functional currency, presentation currency, spot and closing rate, exchange difference and monetary items; grounds valuation instant, rate selection and the original-versus-translated value distinction, including estimation when a currency is not exchangeable." }, { "id": "SRC-033", "title": "IFRS 13 Fair Value Measurement", "organization": "IFRS Foundation", "url": "https://www.ifrs.org/content/dam/ifrs/publications/html-standards/english/2025/issued/ifrs13.html", "version_or_date": "Issued standards, 2025 edition (HTML)", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:08:00Z", "relevance": "Establishes measurement date, observable versus unobservable input hierarchy and disclosure of valuation techniques; grounds valuation authority, measurement basis and input-quality declarations while keeping methodology outside this model." }, { "id": "SRC-034", "title": "PROV-O: The PROV Ontology", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/prov-o/", "version_or_date": "W3C Recommendation, 30 April 2013; namespace http://www.w3.org/ns/prov#", "source_type": "ontology", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:02:00Z", "relevance": "Supplies entity/activity/agent, wasDerivedFrom, wasAttributedTo, wasAssociatedWith, actedOnBehalfOf, wasRevisionOf and generatedAtTime as the alignment target for original-versus-derived value lineage and role attribution." }, { "id": "SRC-035", "title": "eXtensible Access Control Markup Language (XACML) Version 3.0", "organization": "OASIS", "url": "https://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-os-en.html", "version_or_date": "OASIS Standard, 22 January 2013", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:10:00Z", "relevance": "Separates policy decision from enforcement and defines subject/resource/action/environment attribute categories, obligations and advice; fixes the boundary that this model supplies attributes only and never renders or enforces decisions." }, { "id": "SRC-036", "title": "NIST SP 800-162, Guide to Attribute Based Access Control (ABAC) Definition and Considerations", "organization": "National Institute of Standards and Technology", "url": "https://csrc.nist.gov/pubs/sp/800/162/upd1/final", "version_or_date": "January 2014, updated 25 February 2019", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:11:00Z", "relevance": "Defines authorization as evaluation of subject, object, operation and environment attributes against policy; grounds publishing object attributes (sensitivity class, restriction basis, handling label) as the model's only access contribution." }, { "id": "SRC-037", "title": "Universal Electronic Records Management (ERM) Requirements", "organization": "U.S. National Archives and Records Administration (NARA)", "url": "https://www.archives.gov/records-mgmt/policy/universalermrequirements", "version_or_date": "Version 3, June 2023", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:13:00Z", "relevance": "Structures the electronic records lifecycle as capture, maintenance and use, disposal, transfer, metadata and reporting with Must Have / Should Have classification; grounds retention metadata and the separation of disposition readiness from disposal execution." }, { "id": "SRC-038", "title": "17 CFR 240.17a-4 - Records to be preserved by certain exchange members, brokers and dealers", "organization": "U.S. Government Publishing Office / U.S. Securities and Exchange Commission", "url": "https://www.govinfo.gov/content/pkg/CFR-2024-title17-vol4/pdf/CFR-2024-title17-vol4-sec240-17a-4.pdf", "version_or_date": "Code of Federal Regulations, 2024 edition, Title 17, Volume 4", "source_type": "legislation", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:15:00Z", "relevance": "Sets three- and six-year preservation periods, requires either non-rewriteable non-erasable preservation or an audit-trail alternative recording each modification, and requires records to stay readily accessible to examiners - the strongest constraint on correction-by-supersession." }, { "id": "SRC-039", "title": "Taxable amount - VAT Directive 2006/112/EC (Article 91 currency conversion)", "organization": "European Commission, Directorate-General for Taxation and Customs Union", "url": "https://taxation-customs.ec.europa.eu/taxation/vat/vat-directive/taxable-amount_en", "version_or_date": "Consolidated VAT Directive 2006/112/EC, Article 91; page consulted 3 September 2026", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:16:00Z", "relevance": "Shows a statutory rate-source mandate with Member State options (most representative market rate, latest ECB published rate subject to notification, or customs-value rules) - direct evidence that rate-source selection is jurisdictional and must be recorded per profile." }, { "id": "SRC-040", "title": "AS 2201: An Audit of Internal Control Over Financial Reporting That Is Integrated with An Audit of Financial Statements", "organization": "Public Company Accounting Oversight Board (PCAOB)", "url": "https://pcaobus.org/oversight/standards/auditing-standards/details/AS2201", "version_or_date": "AS 2201, as amended by PCAOB Release No. 2024-005, effective 15 December 2026", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:18:00Z", "relevance": "Requires controls over authorization, review and approval of significant transactions and period-end adjustments, notes limits on segregating duties in smaller entities and states that inquiry alone is insufficient evidence - grounds advisory role and segregation declarations and their evidence expectations." }, { "id": "SRC-041", "title": "RFC 9110: HTTP Semantics", "organization": "Internet Engineering Task Force (IETF)", "url": "https://www.rfc-editor.org/rfc/rfc9110.html", "version_or_date": "RFC 9110, June 2022 (Internet Standard, STD 97)", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-04T10:15:00Z", "relevance": "Safe methods (9.2.1), idempotent methods (9.2.2), strong validators and ETag (8.8.3), If-Match (13.1.1) and If-Unmodified-Since (13.1.4), 412 Precondition Failed (15.5.13) and 409 Conflict (15.5.10). Grounds optimistic concurrency, precondition contracts and the read/write safety distinction independently of any transport choice." }, { "id": "SRC-042", "title": "Federal Records Centers Program Freeze Process Overview / FAQ", "organization": "National Archives and Records Administration (NARA), United States", "url": "https://www.archives.gov/frc/arcis/freeze-faq", "version_or_date": "Last reviewed 29 January 2024", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-04T10:15:00Z", "relevance": "Defines a freeze as temporary suspension of scheduled disposition due to circumstances altering administrative, legal or fiscal value; the agency requests and lifts the freeze in writing and the records centre resumes disposition only after formal notification. Grounds hold semantics and the external ownership of destruction." }, { "id": "SRC-043", "title": "HL7 FHIR Release 5 — RESTful API (http.html)", "organization": "Health Level Seven International (HL7)", "url": "https://hl7.org/fhir/http.html", "version_or_date": "FHIR R5 (5.0.0), normative RESTful API sections", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-04T10:15:00Z", "relevance": "Version-aware update via ETag/If-Match with 409 or 412 on mismatch; conditional create via If-None-Exist; conditional update outcomes by match count; vread for prior versions; 410 Gone for deleted resources versus 404 for unknown; 422 for referential-integrity violations; controls on logical-id reuse. A worked, normative precedent for the operation contract." }, { "id": "SRC-044", "title": "HL7 FHIR Release 5 — Data Types (Money, decimal precision)", "organization": "Health Level Seven International (HL7)", "url": "https://hl7.org/fhir/datatypes.html", "version_or_date": "FHIR R5 (5.0.0), normative base types", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-04T10:15:00Z", "relevance": "Money = value (decimal, implicit precision) + currency with a required binding to ISO 4217. States that decimal precision is significant (0.010 differs from 0.01) and that original precision must be preserved. Grounds verbatim amount/scale handling on read and the prohibition on silent re-scaling." }, { "id": "SRC-045", "title": "Verifiable Credentials Data Model v2.0", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/vc-data-model-2.0/", "version_or_date": "W3C Recommendation, 15 May 2025", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-04T10:15:00Z", "relevance": "Issuer, credentialSubject, validFrom/validUntil, credentialStatus (status-list revocation) and securing proofs; credentials are not modified but revoked and reissued. Grounds review-evidence validity intervals, revocation checking and the correction-by-reissue pattern rather than in-place edit." }, { "id": "SRC-046", "title": "The Idempotency-Key HTTP Header Field", "organization": "Internet Engineering Task Force (IETF) HTTP API Working Group", "url": "https://datatracker.ietf.org/doc/draft-ietf-httpapi-idempotency-key-header/", "version_or_date": "draft-ietf-httpapi-idempotency-key-header-07, latest revision 15 October 2025 (Internet-Draft, expired)", "source_type": "standard", "primary_source": true, "authority_tier": 3, "accessed_at": "2026-09-04T10:15:00Z", "relevance": "Key uniqueness and non-reuse with a different payload, optional request fingerprinting, replay of the first recorded outcome, 409 for a duplicate arriving while the original is in flight, 422 for key reuse with a different payload, and a published expiry policy. Adopted here as a documented convention only — it is an expired draft, not a normative standard." }, { "id": "SRC-047", "title": "RFC 9457: Problem Details for HTTP APIs", "organization": "Internet Engineering Task Force (IETF)", "url": "https://www.rfc-editor.org/rfc/rfc9457.html", "version_or_date": "RFC 9457, July 2023 (Standards Track; obsoletes RFC 7807)", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-04T10:15:00Z", "relevance": "Defines type, title, status, detail and instance members plus extension members for machine-readable error identification, with resolvable type URIs. Grounds the model's explicit, structured failure semantics independently of transport." }, { "id": "SRC-048", "title": "Time Ontology in OWL", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/owl-time/", "version_or_date": "W3C Candidate Recommendation Draft, 15 November 2022", "source_type": "ontology", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-04T10:15:00Z", "relevance": "TemporalEntity split into Instant and ProperInterval, hasBeginning/hasEnd, inXSDDateTimeStamp requiring a timezone, and the thirteen Allen interval relations including intervalMeets, intervalOverlaps and intervalDuring. Grounds interval containment, overlap and gap tests over an assertion's version series." }, { "id": "SRC-049", "title": "Calculations 1.1", "organization": "XBRL International", "url": "https://www.xbrl.org/Specification/calculation-1.1/REC-2023-02-22/calculation-1.1-REC-2023-02-22.html", "version_or_date": "Recommendation, 22 February 2023", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-04T09:00:00Z", "relevance": "Normative interval-based definition of calculation consistency derived from declared decimals, distinct round-to-nearest and truncation intervals, duplicate-fact handling and explicit inconsistency error codes — the basis for tolerance semantics in reconciliation." }, { "id": "SRC-050", "title": "Council Regulation (EC) No 1103/97 on certain provisions relating to the introduction of the euro", "organization": "Council of the European Union (via EUR-Lex)", "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=celex:31997R1103", "version_or_date": "17 June 1997, CELEX 31997R1103", "source_type": "legislation", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-04T09:00:00Z", "relevance": "Binding arithmetic rules: conversion rates adopted with six significant figures, no rounding or truncation of the rate, prohibition on inverse rates and on direct bilateral rates, mandatory triangulation through the euro unit with an intermediate value rounded to not less than three decimals, and rounding of converted amounts to the nearest cent or sub-unit." }, { "id": "SRC-051", "title": "Converting to the euro", "organization": "European Commission, Directorate-General for Economic and Financial Affairs", "url": "https://economy-finance.ec.europa.eu/euro/enlargement-euro-area/adoption-fixed-euro-conversion-rate/converting-euro_en", "version_or_date": "Current guidance page citing Council Regulation (EC) No 1103/97", "source_type": "public-authority", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-04T09:00:00Z", "relevance": "Authority restatement of the six-significant-figure rate rule, the prohibition on truncating or rounding the rate, the ban on direct bilateral conversion, the triangulation procedure and the nearest-cent rounding rule including the exactly-half-way case." }, { "id": "SRC-052", "title": "Harmonised ISO 20022 data requirements for enhancing cross-border payments", "organization": "Bank for International Settlements — Committee on Payments and Market Infrastructures", "url": "https://www.bis.org/cpmi/publ/d218.htm", "version_or_date": "17 October 2023; alignment encouraged by end-2027", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-04T09:00:00Z", "relevance": "Establishes a consistent minimum data set for cross-border transactions in ISO 20022, evidencing that amount and currency semantics must survive end-to-end message projection and that fragmented local profiles are a recognised interoperability problem." }, { "id": "SRC-053", "title": "Handbook on Statistical Disclosure Control — Glossary", "organization": "SDC Center of Excellence (co-financed by Eurostat)", "url": "https://sdctools.github.io/HandbookSDC/07-glossary.html", "version_or_date": "Second edition", "source_type": "first-party-doc", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-04T09:00:00Z", "relevance": "Defines the recognised protection operations for aggregated (including monetary) tables — primary and secondary suppression, controlled and random rounding, interval publication, dominance rules and information loss — grounding the redacted/lossy export outcome." } ], "structure": { "bundles": [ { "id": "money-core-currency-reference-bundle", "name": "Currency Reference Identity", "description": "How the currency component of a monetary declaration is identified: which authoritative catalogue and published edition governs the code, which code forms are used, what class and status the catalogue assigns, and how successor or redenominated codes are referenced without owning their lifecycle.", "rationale": "A monetary amount is meaningless without a currency, and a currency code is only interpretable relative to a named catalogue and a published edition of it. The maintenance agency publishes distinct lists for current, registered-fund and historic entries, publishes minor units that are sometimes not applicable, and publishes withdrawal dates at month granularity. Each of those facts changes how a consuming agent must resolve a code, so currency reference is a separate top-level concern from the numeric amount.", "source_refs": [ "SRC-001", "SRC-002", "SRC-003", "SRC-007", "SRC-010" ], "layers": [ { "id": "money-core-code-identity-layer", "name": "Catalogue Binding and Code Form", "description": "Which catalogue, list and published edition the currency code was resolved against, and which code forms (alphabetic, numeric) carry identity while symbols and localized names remain labels.", "source_refs": [ "SRC-001", "SRC-002", "SRC-007", "SRC-010" ], "findings": [ { "id": "money-core-catalogue-binding", "name": "Authoritative currency catalogue and pinned edition", "description": "A currency code only identifies a currency relative to a named catalogue, a specific list within it and a published edition. The ISO 4217 lists carry an explicit published-edition attribute and are amended over time, so a declaration must record which catalogue, which list and which edition it was resolved against, and must be able to verify the retained snapshot before resolving anything against it.", "source_refs": [ "SRC-001", "SRC-002", "SRC-003", "SRC-012" ], "questions": [ { "id": "money-core-q-catalogue-authority", "text": "Which authoritative currency catalogue and maintaining authority governs the code used in this declaration?", "kind": "provenance", "answer_data": [ "Catalogue identifier and publisher name", "Maintenance authority named by the publisher", "Resolvable catalogue location" ] }, { "id": "money-core-q-catalogue-edition", "text": "Which published edition or snapshot of that catalogue was in force when this declaration was made?", "kind": "temporal", "answer_data": [ "Publisher's edition or published date as published", "Amendment sequence number if applicable", "Retrieval timestamp of the retained snapshot" ] }, { "id": "money-core-q-catalogue-list", "text": "Which list within the catalogue supplied the entry: current currencies and funds, registered fund codes, or historic entries?", "kind": "identity", "answer_data": [ "List identifier and published list name", "Entry position or key within the list", "Whether the same code appears in more than one list" ] }, { "id": "money-core-q-catalogue-integrity", "text": "How is the retained catalogue snapshot verified as unaltered before any code is resolved against it?", "kind": "validation", "answer_data": [ "Content digest and named algorithm", "Verification outcome and verification timestamp", "Quarantine action when verification fails" ] }, { "id": "money-core-q-catalogue-divergence", "text": "What must a consumer do when its own currency register differs from the catalogue named in this declaration?", "kind": "interoperability", "answer_data": [ "Declared catalogue identifier carried with the code", "Mapping status between the two registers", "Explicit unresolved marker when no mapping exists" ] } ], "data_elements": [ { "id": "money-core-de-catalogue-id", "name": "Currency catalogue identifier", "description": "Identifier of the catalogue or register that governs the currency code, for example the ISO 4217 code register maintained by its Maintenance Agency.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-001", "SRC-012" ] }, { "id": "money-core-de-catalogue-edition", "name": "Catalogue published edition", "description": "The publisher's own edition marker for the list used, such as the published date attribute carried on the ISO 4217 lists. Retained exactly as published, never re-derived.", "value_kind": "date", "cardinality": "1", "required": true, "source_refs": [ "SRC-002", "SRC-003" ] }, { "id": "money-core-de-catalogue-list", "name": "Catalogue list designator", "description": "Which list within the catalogue supplied the entry: current currencies and funds, registered fund codes, or historic currencies and funds.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-002", "SRC-003" ] }, { "id": "money-core-de-catalogue-digest", "name": "Catalogue snapshot digest", "description": "Content digest of the retained catalogue snapshot together with the algorithm name, used to prove the snapshot resolved against was unaltered.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002", "SRC-003" ] } ], "artifacts": [ { "id": "money-core-art-catalogue-snapshot", "name": "Retained currency catalogue snapshot", "description": "A retained copy of the publisher's currency code list for one published edition, used so that a code resolved at declaration time can be reproduced later even after the publisher amends the list. The adopting Dimension retains it; the publisher continues to own its content and lifecycle.", "media_or_form": [ "Machine-readable code list as published by the maintenance agency", "Tabular spreadsheet export of the same list", "Publisher-independent normalized projection retained alongside the original" ], "serial": true, "identity_strategy": "Publisher name plus published list designator plus the publisher's own published-edition marker; a content digest is recorded for integrity. The edition marker orders the series but is never used as the identifier of a declaration.", "source_refs": [ "SRC-001", "SRC-002", "SRC-003" ] }, { "id": "money-core-art-catalogue-amendment", "name": "Retained catalogue amendment notice", "description": "A retained copy of a numbered amendment notice issued by the maintenance agency between full list editions, explaining why an entry's status, name or minor unit changed. Held as evidence for a status transition; the amendment's authority and lifecycle remain with the issuing agency.", "media_or_form": [ "Numbered amendment notice document as issued by the maintenance agency", "Extracted change record referencing the affected codes" ], "serial": true, "identity_strategy": "Issuing agency plus the agency's own amendment sequence number; ordering follows the agency sequence rather than retrieval order, and a content digest is recorded for integrity.", "source_refs": [ "SRC-001" ] } ], "inline_only_rationale": null }, { "id": "money-core-code-forms", "name": "Alphabetic and numeric code forms; symbols as labels only", "description": "The catalogue publishes both an alphabetic code and a numeric code for an entry, and either may reach this declaration. Display symbols and localized currency names are ambiguous across currencies and must be carried, if at all, as presentation labels that never participate in identity or matching.", "source_refs": [ "SRC-002", "SRC-007", "SRC-010" ], "questions": [ { "id": "money-core-q-code-forms", "text": "Which alphabetic code and which numeric code identify the currency, and which form is authoritative for exchange here?", "kind": "identity", "answer_data": [ "Alphabetic code as published", "Numeric code as published", "Which form the declaration treats as primary" ] }, { "id": "money-core-q-code-constraints", "text": "What constraints govern an accepted code token: character set, length, case and permitted normalization?", "kind": "constraint", "answer_data": [ "Accepted lexical pattern", "Case-normalization rule applied before comparison", "Rejection outcome for a non-conforming token" ] }, { "id": "money-core-q-symbol-role", "text": "Is any presented currency symbol or localized name recorded strictly as a display label rather than as an identifier?", "kind": "classification", "answer_data": [ "Label string as presented", "Locale tag the label belongs to", "Explicit flag marking the string as non-identifying" ] }, { "id": "money-core-q-code-form-consistency", "text": "How are the alphabetic and numeric forms reconciled when the host supplies only one of them?", "kind": "relationship", "answer_data": [ "Resolution rule applied against the pinned edition", "Counterpart code returned by the lookup", "Outcome recorded when the two forms disagree" ] } ], "data_elements": [ { "id": "money-core-de-alpha-code", "name": "Alphabetic currency code", "description": "The catalogue's alphabetic code for the currency, carried as the primary identifying token of the currency reference.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-002", "SRC-008", "SRC-010" ] }, { "id": "money-core-de-numeric-code", "name": "Numeric currency code", "description": "The catalogue's numeric code for the same entry, carried when a host system exchanges numeric rather than alphabetic tokens.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002" ] }, { "id": "money-core-de-display-label", "name": "Currency display label", "description": "An optional symbol or localized currency name shown to a person. Explicitly non-identifying, because the same symbol may denote several currencies.", "value_kind": "text", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "money-core-de-label-locale", "name": "Display label locale", "description": "The locale a display label belongs to, recorded so that a label is never reused outside the locale that produced it.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] } ], "artifacts": [], "inline_only_rationale": "Code forms and display labels are short inline field values on the host object plus a reference into the pinned catalogue snapshot declared elsewhere in this model. There is no separately identified, separately retained object here: producing one would duplicate the catalogue snapshot and create a second, competing source of code truth." } ] }, { "id": "money-core-code-status-layer", "name": "Code Class, Status and Succession References", "description": "What class and status the catalogue assigns to a code, what that does and does not permit a consumer to infer, and how successor or redenominated codes are referenced as facts published elsewhere.", "source_refs": [ "SRC-002", "SRC-003", "SRC-010", "SRC-012" ], "findings": [ { "id": "money-core-code-class-status", "name": "Code class, status and published minor unit", "description": "Catalogue entries are not homogeneous: alongside national currencies the register carries registered fund codes, precious-metal codes, a testing code and a code for transactions where no currency is involved, and it publishes minor units as not applicable for several of these. Class and status must be read from the pinned edition, and nothing about jurisdiction, legal tender or exchangeability may be inferred from the code.", "source_refs": [ "SRC-002", "SRC-003", "SRC-010" ], "questions": [ { "id": "money-core-q-code-class", "text": "Which class does the code belong to: active national currency, registered fund code, precious metal, testing code, or no-currency code?", "kind": "classification", "answer_data": [ "Class value derived from the pinned catalogue entry", "List membership evidencing the class", "Whether the host permits that class in this field" ] }, { "id": "money-core-q-code-status", "text": "Is the code active or withdrawn according to the pinned catalogue edition rather than according to the current one?", "kind": "state", "answer_data": [ "Status value as at the pinned edition", "Pinned edition marker used for the determination", "Whether a later edition changes the status" ] }, { "id": "money-core-q-minor-unit", "text": "Which minor-unit value does the catalogue publish for this code, and what happens when it is published as not applicable?", "kind": "constraint", "answer_data": [ "Published minor-unit value where present", "Flag recording that no minor unit is published", "Host-declared scale that must then be supplied" ] }, { "id": "money-core-q-unresolved-code", "text": "How is a code absent from the pinned catalogue edition recorded without silently defaulting to any currency?", "kind": "exception", "answer_data": [ "Unresolved marker on the currency reference", "Reason code for the failure to resolve", "Explicit prohibition on substituting a default" ] }, { "id": "money-core-q-non-inference", "text": "What is explicitly not derivable from a currency code, and where is that prohibition recorded?", "kind": "definition", "answer_data": [ "Enumerated list of prohibited derivations", "Statement that country, legal tender and exchangeability are not encoded", "Pointer to the model that does own each excluded fact" ] } ], "data_elements": [ { "id": "money-core-de-code-class", "name": "Currency code class", "description": "The class the pinned catalogue assigns to the entry: national currency, registered fund code, precious metal, testing code, or no-currency code.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-002" ] }, { "id": "money-core-de-code-status", "name": "Currency code status at pinned edition", "description": "Whether the code was active or historic in the pinned catalogue edition, determined from the list that contained it rather than from current knowledge.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-002", "SRC-003", "SRC-010" ] }, { "id": "money-core-de-published-minor-unit", "name": "Published minor unit", "description": "The minor-unit value published by the catalogue for the entry, where one is published. Present only as a catalogue fact, not as the declaration's operative scale.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002" ] }, { "id": "money-core-de-minor-unit-applicable", "name": "Minor unit applicability flag", "description": "Records that the catalogue publishes no applicable minor unit for this entry, which forces the host to declare an explicit scale rather than assume a default.", "value_kind": "boolean", "cardinality": "1", "required": true, "source_refs": [ "SRC-002", "SRC-007" ] }, { "id": "money-core-de-code-resolution-state", "name": "Code resolution state", "description": "Whether the code resolved against the pinned edition, and if not, the reason. Prevents an unresolved code from being treated as any currency.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-002", "SRC-009" ] } ], "artifacts": [], "inline_only_rationale": "Class, status, published minor unit and resolution outcome are derived facts about a single catalogue entry, held inline on the declaration together with a reference to the pinned snapshot that evidences them. Retaining them as a separate object would fork the register, and the register itself is already retained as a declared artifact under the catalogue-binding finding." }, { "id": "money-core-succession-reference", "name": "Successor and redenomination references", "description": "When a currency is replaced or redenominated, the catalogue records the withdrawal and the successor arrangement. This declaration may carry a reference to the successor code and to the instrument or amendment that recorded it, so a reader can follow the chain, but it neither owns that transition nor re-expresses a historical amount in the successor currency.", "source_refs": [ "SRC-001", "SRC-003", "SRC-012" ], "questions": [ { "id": "money-core-q-successor-code", "text": "Which successor code does the catalogue associate with the withdrawn code used by this declaration?", "kind": "relationship", "answer_data": [ "Predecessor code as declared", "Successor code reference as published", "Catalogue evidence supporting the association" ] }, { "id": "money-core-q-withdrawal-timing", "text": "What withdrawal or changeover period does the catalogue publish, and at what granularity is it published?", "kind": "temporal", "answer_data": [ "Withdrawal period exactly as published", "Granularity of that published value", "Pinned edition that carried it" ] }, { "id": "money-core-q-succession-authority", "text": "Which body declared the replacement or redenomination, and where is that declaration recorded?", "kind": "authority", "answer_data": [ "Declaring authority name", "Reference to the instrument or decision", "Catalogue amendment identifier that recorded it" ] }, { "id": "money-core-q-no-restatement", "text": "Why must a historical amount stay expressed in its original currency inside this declaration rather than be restated in the successor currency?", "kind": "constraint", "answer_data": [ "Original code and original exact amount", "Prohibition flag on in-place restatement", "Pointer to where a converted value would instead be declared" ] } ], "data_elements": [ { "id": "money-core-de-successor-ref", "name": "Successor currency reference", "description": "A reference to the code that the catalogue records as succeeding a withdrawn code, carried as a pointer only.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "money-core-de-withdrawal-period", "name": "Published withdrawal period", "description": "The withdrawal or changeover period exactly as published by the catalogue, which may be a month or a month range rather than an instant, retained verbatim without being widened into a false precise timestamp.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "money-core-de-succession-authority", "name": "Succession declaring authority reference", "description": "Reference to the authority and instrument that declared the replacement or redenomination, recorded so that the chain is traceable outside this model.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-012" ] } ], "artifacts": [], "inline_only_rationale": "The transition itself is owned by the maintenance agency and by whichever authority declared it; this model carries pointers, not the transition record. Declaring a local artifact here would duplicate the agency's amendment notice, which is already retained under the catalogue-binding finding, and would imply this model governs currency succession." } ] } ] }, { "id": "money-core-amount-representation-bundle", "name": "Exact Amount Representation and Declaration Integrity", "description": "How the numeric part of a monetary declaration is represented exactly, how its canonical form differs from any display form, how amount and currency stay inseparable on the host object, and how determinacy states and intervals are declared so that absence is never silently expressed as zero.", "rationale": "An exact decimal value space, a canonical lexical form and an explicit scale are all defined by published datatype and arithmetic specifications, and the same specifications show that numerically equal representations can differ visibly and that a signed zero exists. Separately, published monetary datatypes bind amount to currency as one type, published absent-value vocabularies show that absence is a distinct assertion, and published monetary vocabularies show that a monetary value may be an interval. These are representation and integrity concerns distinct from currency identity, so they form their own bundle.", "source_refs": [ "SRC-004", "SRC-005", "SRC-006", "SRC-008", "SRC-009", "SRC-010", "SRC-011" ], "layers": [ { "id": "money-core-decimal-form-layer", "name": "Exact Decimal Value and Canonical Form", "description": "The abstract number model used for the amount, the digit bounds that constrain it, and the canonical lexical form that distinguishes a stored value from a rendered string.", "source_refs": [ "SRC-004", "SRC-005", "SRC-006", "SRC-008" ], "findings": [ { "id": "money-core-exact-decimal", "name": "Exact decimal amount as sign, coefficient and scale", "description": "The amount is an exact decimal value: a sign, a non-negative integer coefficient and a scale expressed as a non-positive power of ten. Binary floating point is rejected as the canonical representation because it cannot represent common decimal fractions exactly. Digit bounds on coefficient and scale are declared by the host or profile, and a value that cannot be represented exactly at the declared scale is rejected rather than rounded away.", "source_refs": [ "SRC-004", "SRC-005", "SRC-006", "SRC-008", "SRC-010" ], "questions": [ { "id": "money-core-q-decimal-triple", "text": "What sign, integer coefficient and scale together represent the declared amount exactly?", "kind": "measurement", "answer_data": [ "Sign component", "Non-negative integer coefficient", "Scale as a non-positive power of ten" ] }, { "id": "money-core-q-encoding-choice", "text": "Which exact encodings are permitted for the amount, and why is binary floating point excluded from them?", "kind": "constraint", "answer_data": [ "Enumerated permitted encodings", "Enumerated prohibited encodings", "Reference to the exactness requirement that excludes binary floating point" ] }, { "id": "money-core-q-digit-bounds", "text": "What total-digit and fraction-digit bounds does the host or profile impose on this amount?", "kind": "requirement", "answer_data": [ "Total-digit bound in force", "Fraction-digit bound in force", "Identifier of the profile that set them" ] }, { "id": "money-core-q-inexact-rejection", "text": "How is a supplied value rejected when it cannot be held exactly at the declared scale?", "kind": "validation", "answer_data": [ "Rejection reason code", "Offending input token retained for diagnosis", "Declared scale that the input violated" ] } ], "data_elements": [ { "id": "money-core-de-amount-sign", "name": "Amount sign", "description": "The sign component of the exact decimal value, kept distinct from the coefficient so that a signed zero remains expressible.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-005" ] }, { "id": "money-core-de-amount-coefficient", "name": "Amount coefficient", "description": "The non-negative integer coefficient of the exact decimal value, which together with the scale reconstructs the amount without loss.", "value_kind": "number", "cardinality": "1", "required": true, "source_refs": [ "SRC-004", "SRC-005" ] }, { "id": "money-core-de-amount-scale", "name": "Declared amount scale", "description": "The number of fraction digits carried by the declaration, declared explicitly rather than inferred from the currency code.", "value_kind": "number", "cardinality": "1", "required": true, "source_refs": [ "SRC-004", "SRC-002" ] }, { "id": "money-core-de-amount-encoding", "name": "Amount encoding declaration", "description": "Which exact encoding carries the amount in a given projection, for example a decimal lexical string or an explicit coefficient-and-scale pair. Binary floating point is not an admissible value.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-005", "SRC-006" ] }, { "id": "money-core-de-digit-bounds", "name": "Declared digit bounds", "description": "The total-digit and fraction-digit limits the host or profile imposes on the amount, recorded so that a validator can reject out-of-bound values deterministically.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-004", "SRC-008", "SRC-010" ] } ], "artifacts": [], "inline_only_rationale": "The exact amount is a small set of scalar fields embedded directly in the host record; it has no independent existence, no separate retention life and no separate identity from the host object that declares it, so representing it as an artifact would fabricate an object that no source or projection recognizes." }, { "id": "money-core-lexical-canonical", "name": "Canonical lexical form, trailing zeros and zero handling", "description": "The canonical lexical form of the amount is fixed and distinct from any rendered display string. Because numerically equal decimal representations can differ visibly, the declaration must state whether trailing zeros are significant, and must state how zero and a signed zero are treated, so that round-tripping preserves sign, coefficient and scale.", "source_refs": [ "SRC-004", "SRC-005", "SRC-007", "SRC-008" ], "questions": [ { "id": "money-core-q-canonical-form", "text": "What is the canonical lexical form of this amount, and how does it differ from any string rendered for display?", "kind": "definition", "answer_data": [ "Canonical lexical string", "Rendered display string where one exists", "Locale that produced the display string" ] }, { "id": "money-core-q-trailing-zeros", "text": "Are trailing zeros significant here, so that a value written with two fraction digits differs from the same value written with one?", "kind": "constraint", "answer_data": [ "Declared scale", "Significance rule for trailing zeros", "Policy for choosing among numerically equal representations" ] }, { "id": "money-core-q-zero-handling", "text": "How are zero and a signed negative zero distinguished, normalized or rejected in this declaration?", "kind": "state", "answer_data": [ "Representation used for zero", "Policy on accepting or normalizing a negative zero", "Normalized output produced" ] }, { "id": "money-core-q-round-trip", "text": "Which round-trip check proves that parsing and re-serializing preserves sign, coefficient and scale?", "kind": "quality", "answer_data": [ "Input lexical token", "Re-serialized output token", "Component-wise equality outcome" ] } ], "data_elements": [ { "id": "money-core-de-canonical-amount", "name": "Canonical amount string", "description": "The amount in the model's canonical lexical form, with a single agreed treatment of sign, decimal point and zero padding, used for storage, hashing and equality.", "value_kind": "text", "cardinality": "1", "required": true, "source_refs": [ "SRC-004", "SRC-005" ] }, { "id": "money-core-de-display-string", "name": "Rendered display string", "description": "An optional human-facing rendering of the amount. Non-authoritative, locale-dependent, and never used for comparison or storage.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "money-core-de-trailing-zero-significance", "name": "Trailing-zero significance flag", "description": "States whether the declared scale is meaningful in itself, so that numerically equal representations with different scales are not treated as identical.", "value_kind": "boolean", "cardinality": "1", "required": true, "source_refs": [ "SRC-005", "SRC-008" ] }, { "id": "money-core-de-negative-zero-policy", "name": "Negative-zero policy", "description": "The declared policy for a zero coefficient carrying a negative sign: accepted as given, normalized to unsigned zero, or rejected.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-005" ] } ], "artifacts": [], "inline_only_rationale": "Canonical form, significance and zero policy are field-level rules and small inline values on the declaration itself. They are consumed at parse and serialization time and have no retained, separately addressable representation, so an artifact would misrepresent a formatting contract as a stored object." } ] }, { "id": "money-core-declaration-layer", "name": "Declaration Integrity, Determinacy and Intervals", "description": "How the monetary declaration holds together as one unit on its host, what the host says a negative amount means, and how determinacy is declared across exact point values, intervals, approximations and explicit absence.", "source_refs": [ "SRC-008", "SRC-009", "SRC-010", "SRC-011" ], "findings": [ { "id": "money-core-pair-integrity", "name": "Amount and currency inseparability on the host object", "description": "Amount, currency reference and declared scale form one indivisible declaration: published monetary datatypes bind them into a single type, and a value interchanged without a known currency code is not interpretable. The host object owns the business meaning, including what a negative amount signifies, and projections that split the parts into separate fields must still assert the binding.", "source_refs": [ "SRC-007", "SRC-008", "SRC-010", "SRC-011" ], "questions": [ { "id": "money-core-q-declaration-unit", "text": "Which fields make up the indivisible declaration, and may any of them be stored or transmitted without the others?", "kind": "composition", "answer_data": [ "Declaration identifier", "Enumerated member fields", "Atomicity rule and the prohibited partial forms" ] }, { "id": "money-core-q-host-binding", "text": "Which host object and field declares this monetary value, and what meaning does the host assign to it?", "kind": "ownership", "answer_data": [ "Host model identifier", "Host field path where the mixin is embedded", "Host-stated meaning of the field" ] }, { "id": "money-core-q-negative-meaning", "text": "What does a negative amount signify in this host context, and which signs are permitted at all?", "kind": "definition", "answer_data": [ "Host-declared sign semantics", "Permitted sign set for the field", "Statement that the sign meaning is not derived from the currency" ] }, { "id": "money-core-q-projection-integrity", "text": "How is the binding preserved when a target format splits amount and currency into separate fields?", "kind": "interoperability", "answer_data": [ "Target format identifier", "Field mapping for each member", "Assertion that reassembly reproduces the declaration" ] } ], "data_elements": [ { "id": "money-core-de-declaration-id", "name": "Monetary declaration identifier", "description": "Identifier of the monetary declaration instance, assigned by the adopting Dimension only where the host cannot address the declaration through its own record identity and field path.", "value_kind": "identifier", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-008", "SRC-011" ] }, { "id": "money-core-de-host-ref", "name": "Host object and field reference", "description": "Reference to the host record and the field path at which this mixin is embedded, establishing who owns the business meaning of the value.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-008", "SRC-011" ] }, { "id": "money-core-de-sign-semantics", "name": "Host-declared sign semantics", "description": "What the host says a negative amount means in this field, for example a credit, refund or reduction. Declared, never inferred from the currency or from the model.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-008", "SRC-011" ] }, { "id": "money-core-de-allowed-sign-set", "name": "Permitted sign set", "description": "The signs the host field admits, used to reject a negative value where the host permits only non-negative amounts.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-010" ] } ], "artifacts": [], "inline_only_rationale": "This finding describes an embedding contract between a mixin and its host record: the declaration lives inside the host's own persisted object and inherits the host's identity and lifecycle. There is nothing to retain independently, and creating an artifact would assert a standalone monetary record that this mixin explicitly is not." }, { "id": "money-core-value-states", "name": "Declared determinacy: exact point, interval, approximate or explicitly absent", "description": "A monetary field must be able to say what kind of assertion it is making. Published monetary vocabularies support a value or a bounded range, and published absent-value vocabularies distinguish unknown, masked, not-applicable, unsupported and error. The declaration therefore carries an explicit determinacy state, so an absent or unknown value is never silently expressed as zero and an interval is never collapsed to a point.", "source_refs": [ "SRC-008", "SRC-009", "SRC-011" ], "questions": [ { "id": "money-core-q-determinacy-state", "text": "Which determinacy state does this declaration assert: exact point value, interval, approximate value, unknown, missing or not applicable?", "kind": "state", "answer_data": [ "State value from the declared vocabulary", "Identifier of the vocabulary used", "Evidence or source of the state assertion" ] }, { "id": "money-core-q-zero-prohibition", "text": "Which rule forbids expressing an absent, unknown or not-applicable monetary value as zero?", "kind": "constraint", "answer_data": [ "Prohibition rule statement", "Absent-reason code carried instead of a numeric value", "Validation outcome when a zero is supplied for an absent value" ] }, { "id": "money-core-q-interval-endpoints", "text": "When an interval is declared, which endpoints are present and is each endpoint inclusive or exclusive?", "kind": "composition", "answer_data": [ "Lower endpoint declaration or its absence", "Upper endpoint declaration or its absence", "Inclusivity flag for each present endpoint" ] }, { "id": "money-core-q-interval-consistency", "text": "How is an interval checked for a shared currency reference and a consistent scale across both endpoints?", "kind": "validation", "answer_data": [ "Currency reference of each endpoint", "Declared scale of each endpoint", "Consistency outcome and failure reason" ] }, { "id": "money-core-q-state-unsupported", "text": "What must a consumer do when it cannot honour a declared approximate or absent state?", "kind": "decision", "answer_data": [ "Consumer capability declaration", "Rejection or degradation outcome chosen", "Escalation path recorded for the unsupported state" ] } ], "data_elements": [ { "id": "money-core-de-value-state", "name": "Value determinacy state", "description": "The declared kind of monetary assertion: exact point value, interval, approximate value, or explicitly absent. Required so that no state is inferred from a numeric default.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-008", "SRC-009", "SRC-011" ] }, { "id": "money-core-de-absent-reason", "name": "Absent-value reason", "description": "When no amount is asserted, the reason for absence drawn from a declared vocabulary distinguishing unknown, masked, not applicable, unsupported and error.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "money-core-de-interval-lower", "name": "Interval lower endpoint", "description": "The lower endpoint of a monetary interval, itself a complete monetary declaration carrying its own currency reference and scale.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-011" ] }, { "id": "money-core-de-interval-upper", "name": "Interval upper endpoint", "description": "The upper endpoint of a monetary interval, itself a complete monetary declaration carrying its own currency reference and scale.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-011" ] }, { "id": "money-core-de-endpoint-inclusivity", "name": "Endpoint inclusivity", "description": "Whether each present interval endpoint is inclusive or exclusive, declared rather than assumed.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-004", "SRC-011" ] } ], "artifacts": [], "inline_only_rationale": "Determinacy states, absent reasons and interval endpoints are inline field values plus references into a declared code vocabulary that another model or terminology authority publishes. Materializing them as an artifact would either duplicate that external vocabulary or invent a record with no counterpart in any consulted specification." } ] } ] }, { "id": "money-policy-precision-and-quantization", "name": "Precision, Scale and Quantization Policy", "description": "Everything an agent must know to state how many digits a monetary amount carries, where those digits come from, and under which explicit rule the amount was quantized.", "rationale": "Monetary precision is not a storage detail. Minor units vary by currency and change when the maintenance agency amends its lists; calculation precision routinely exceeds reporting precision; and cash regimes quantize to increments that are not powers of ten. The bundle is grounded in the currency register, decimal rounding modes and quantize semantics, statutory conversion precision and two independent official cash-rounding instruments.", "source_refs": [ "SRC-005", "SRC-013", "SRC-001", "SRC-014", "SRC-015", "SRC-016", "SRC-017", "SRC-018" ], "layers": [ { "id": "money-policy-precision-declaration", "name": "Precision and Scale Declaration", "description": "How declared precision, scale and currency minor-unit metadata are recorded, versioned and distinguished from incidental digits in a representation.", "source_refs": [ "SRC-005", "SRC-001", "SRC-017", "SRC-010", "SRC-018" ], "findings": [ { "id": "money-policy-declared-scale-and-observed-digits", "name": "Declared precision and scale versus observed digits", "description": "A monetary amount carries a declared arithmetic context — scale, precision and accuracy mode — that is independent of the digits appearing in any serialisation. Trailing zeros, padded decimals and truncated text are representation artefacts; the declaration states which digits are meaningful and whether the value's exponent is preserved.", "source_refs": [ "SRC-005", "SRC-013", "SRC-017", "SRC-010" ], "questions": [ { "id": "money-policy-scale-definition", "text": "What does the declared scale of this monetary amount assert about the meaningfulness of its digits?", "kind": "definition", "answer_data": [ "declared scale as a fraction-digit count", "declared precision as significant digits", "accuracy mode: exact, accurate to decimals, or accurate to significant figures", "statement of which trailing digits are significant" ] }, { "id": "money-policy-observed-vs-declared", "text": "How is a mismatch between the digits observed in a representation and the declared scale detected and reported?", "kind": "validation", "answer_data": [ "observed fraction-digit count", "declared scale", "mismatch classification: padding, truncation or excess precision", "warning or failure signal identifier returned to the caller" ] }, { "id": "money-policy-cohort-preservation", "text": "Are numerically equal values with different exponents, such as 1 and 1.00, preserved as distinct declarations or normalised?", "kind": "constraint", "answer_data": [ "exponent preservation flag", "normalisation rule reference if normalisation is applied", "canonical exponent selection rule", "same-quantum test outcome for the pair" ] }, { "id": "money-policy-accuracy-attribute-mapping", "text": "Which external accuracy attribute does this declaration map to when the value is exchanged?", "kind": "interoperability", "answer_data": [ "target profile or taxonomy identifier", "mapped accuracy attribute name and value", "infinite-accuracy indicator where the value is stated exactly", "mapping caveats and known lossy directions" ] } ], "data_elements": [ { "id": "money-policy-declared-scale", "name": "Declared scale", "description": "Number of fraction digits the amount is declared to carry, independent of serialisation.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-005", "SRC-017" ] }, { "id": "money-policy-declared-precision", "name": "Declared precision", "description": "Number of significant digits to which the amount is declared accurate, used where accuracy is expressed in significant figures rather than decimal places.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-017" ] }, { "id": "money-policy-accuracy-mode", "name": "Accuracy mode", "description": "Which accuracy semantics the declaration uses: exact, accurate-to-decimals or accurate-to-significant-figures. The decimal-place and significant-figure forms are mutually exclusive.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-017" ] }, { "id": "money-policy-exponent-preservation", "name": "Exponent preservation flag", "description": "Whether the original exponent within the value's cohort is retained rather than normalised, so that 1 and 1.00 remain distinguishable.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-005", "SRC-013" ] }, { "id": "money-policy-observed-fraction-digits", "name": "Observed fraction digits", "description": "Count of fraction digits actually present in the representation being inspected, recorded for comparison against the declared scale.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010" ] } ], "artifacts": [], "inline_only_rationale": "This finding is a declaration about the amount itself and produces no independently governed deliverable. Scale, precision, accuracy mode and exponent preservation travel inline with the monetary value in whatever projection the host uses; emitting them as a separate artefact would create a second source of truth for the same fact and invite the two to diverge." }, { "id": "money-policy-minor-unit-currency-property", "name": "Minor-unit metadata as a version-pinned currency property", "description": "The number of minor-unit digits is a published property of the currency, not an implicit storage limit. It varies across zero, two, three and four digits and is absent for some funds, metals and index codes, and it changes when a currency is created, withdrawn or altered — so every use must pin the list or amendment version consulted.", "source_refs": [ "SRC-001", "SRC-014", "SRC-010", "SRC-018" ], "questions": [ { "id": "money-policy-minor-unit-source", "text": "Which published currency list and version supplied the minor-unit value used for this amount?", "kind": "provenance", "answer_data": [ "maintenance-agency list identifier, current or historical", "list publication date or amendment number", "currency alphabetic and numeric code", "retrieved minor-unit value" ] }, { "id": "money-policy-minor-unit-absent", "text": "How is an amount handled when the currency has no defined minor unit or the code denotes a fund, metal or index?", "kind": "exception", "answer_data": [ "minor-unit not-applicable indicator", "substitute precision rule and the authority for it", "eligibility of the code for monetary arithmetic", "explicit rejection reason where arithmetic is refused" ] }, { "id": "money-policy-minor-unit-change", "text": "What happens to previously recorded amounts when a currency's minor unit changes or the currency is withdrawn?", "kind": "lifecycle", "answer_data": [ "effective date of the amendment", "amendment identifier", "restatement or retain-as-recorded decision", "historical-currency list reference for the withdrawn code" ] }, { "id": "money-policy-minor-unit-vs-field-limit", "text": "Where an exchange profile's decimal limit differs from the currency minor unit, which limit governs and how is the difference recorded?", "kind": "authority", "answer_data": [ "profile-declared maximum fraction digits", "currency minor-unit digits", "governing constraint and the authority establishing it", "recorded deviation note carried with the value" ] } ], "data_elements": [ { "id": "money-policy-currency-code-binding", "name": "Currency code binding", "description": "The alphabetic and numeric code identifying the currency or fund to which the amount belongs; the amount is meaningless without it.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-001", "SRC-010" ] }, { "id": "money-policy-minor-unit-digits", "name": "Minor-unit digits", "description": "Published minor-unit exponent for the currency, such as 0, 2, 3 or 4; absent where the register records no applicable minor unit.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001" ] }, { "id": "money-policy-currency-list-version", "name": "Currency list version pin", "description": "Identifier of the dated list or amendment from which the currency properties and minor unit were read.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-001" ] }, { "id": "money-policy-profile-max-fraction-digits", "name": "Profile maximum fraction digits", "description": "Decimal limit imposed by the exchange or reporting profile in use, recorded separately from the currency minor unit because the two can disagree.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010", "SRC-018" ] } ], "artifacts": [ { "id": "money-policy-currency-precision-profile", "name": "Currency precision profile snapshot", "description": "A dated, immutable snapshot of the currency properties used for precision decisions: alphabetic and numeric code, minor-unit digits or a not-applicable marker, current or historical status, and the maintenance-agency list or amendment it was taken from.", "media_or_form": [ "structured record set", "tabular list export", "immutable reference snapshot" ], "serial": true, "identity_strategy": "Identified by the maintenance agency's list or amendment identifier where one exists; otherwise by a governed IRI in the adopting Dimension's reference namespace; a ULID assigned by the Dimension only when neither exists. The list's publication date and the snapshot's retrieval time are recorded as separate attributes and never used as the identifier.", "source_refs": [ "SRC-001", "SRC-010" ] } ], "inline_only_rationale": null } ] }, { "id": "money-policy-quantization-rules", "name": "Quantization and Rounding Rules", "description": "The explicit, named rules under which an amount is quantized — mode, increment, direction and tie handling — and the stage of a calculation at which each rule applies.", "source_refs": [ "SRC-006", "SRC-005", "SRC-013", "SRC-014", "SRC-015", "SRC-016", "SRC-018" ], "findings": [ { "id": "money-policy-quantization-rule-specification", "name": "Rounding mode, increment, direction and tie handling", "description": "A quantization rule is interpretable only when mode, target exponent or increment, direction and tie handling are all stated. Accounting quantization to a currency minor unit, cash quantization to a non-decimal increment such as five cents, and custom contractual quantization are distinct named rules with different authorities and channel scopes — not variants of one default.", "source_refs": [ "SRC-005", "SRC-013", "SRC-014", "SRC-015", "SRC-016" ], "questions": [ { "id": "money-policy-rounding-mode-selection", "text": "Which named rounding mode applies to this value, and what authority establishes it?", "kind": "authority", "answer_data": [ "rounding mode identifier such as half-even, half-up, floor, ceiling, down, up or 05up", "authority or legal instrument establishing the mode", "jurisdiction or scheme scope of that authority", "effective period of the rule" ] }, { "id": "money-policy-quantization-target-kind", "text": "Is the quantization target a power-of-ten scale or a non-decimal increment, and what exactly is that target?", "kind": "classification", "answer_data": [ "quantization kind: scale-based or increment-based", "target exponent for scale-based quantization", "increment value with its currency for increment-based quantization", "source of the target: currency minor unit, cash regime or contract" ] }, { "id": "money-policy-tie-handling", "text": "How are exact half-way values resolved, and does the resolution differ by sign?", "kind": "constraint", "answer_data": [ "tie rule such as half-up, half-even, half-down or away-from-zero", "sign-symmetry statement", "worked example for one positive and one negative tie", "citation of the establishing instrument" ] }, { "id": "money-policy-rule-applicability", "text": "Which payment or presentation channel does this quantization rule apply to, and which channels does it explicitly exclude?", "kind": "requirement", "answer_data": [ "applicable channel: cash, electronic, accounting entry or display", "excluded channels", "scope: whole total only, or per line or component", "voluntary or mandatory status of the rule" ] }, { "id": "money-policy-rule-versioning", "text": "How is a change to the quantization rule versioned so that historic amounts remain reproducible?", "kind": "provenance", "answer_data": [ "rule version identifier", "effective-from and effective-to timestamps", "reference to the superseded rule version", "restatement policy for values produced under the earlier version" ] } ], "data_elements": [ { "id": "money-policy-rounding-mode", "name": "Rounding mode", "description": "Named rounding mode applied, drawn from the mandatory and optional decimal rounding modes rather than from a library default.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-005", "SRC-013" ] }, { "id": "money-policy-quantization-increment", "name": "Quantization increment", "description": "Non-decimal increment to which the amount is quantized, expressed as an amount with a currency, for example a five-cent cash step.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-015", "SRC-016" ] }, { "id": "money-policy-target-exponent", "name": "Target exponent", "description": "Exponent the quantized result must carry when quantization is scale-based.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-013" ] }, { "id": "money-policy-tie-rule", "name": "Tie resolution rule", "description": "How an exact half-way value is resolved, recorded explicitly because statutory and accounting defaults differ.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-014" ] }, { "id": "money-policy-rule-channel-scope", "name": "Rule channel scope", "description": "The channels and application points to which the rule applies and those it excludes.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-015", "SRC-016" ] } ], "artifacts": [ { "id": "money-policy-quantization-policy-record", "name": "Quantization policy record", "description": "A versioned, effective-dated record of one named quantization rule: mode, target exponent or increment, tie handling, channel scope, applicable currencies, and the instrument or authority that establishes it.", "media_or_form": [ "versioned policy record", "structured rule definition", "human-readable rule statement" ], "serial": true, "identity_strategy": "Identified by the issuing authority's instrument reference — a regulation, central-bank notice or scheme rule identifier — where one exists; otherwise by a governed IRI in the adopting Dimension's policy namespace; a UUID assigned by the Dimension only when neither exists. Version tokens and effective periods are attributes, never encoded into the identifier.", "source_refs": [ "SRC-014", "SRC-015", "SRC-016" ] } ], "inline_only_rationale": null }, { "id": "money-policy-rounding-stage-and-precision-tiers", "name": "Calculation, settlement and display precision; intermediate versus final rounding", "description": "Distinct precision tiers apply at different stages. Intermediate calculation frequently requires more digits than the reporting minor unit, settlement quantizes to the payable increment, and presentation may differ again. Whether rounding is applied per component or once at the end changes the result, so the stage must be declared and results derived from already-rounded inputs must not be re-rounded silently.", "source_refs": [ "SRC-006", "SRC-014", "SRC-017", "SRC-018" ], "questions": [ { "id": "money-policy-precision-tier-set", "text": "Which precision tiers are declared for this value, and what scale does each tier carry?", "kind": "composition", "answer_data": [ "tier list: calculation, settlement, presentation, reporting", "scale or increment per tier", "ordering relationship between tiers", "the tier to which the recorded amount belongs" ] }, { "id": "money-policy-rounding-stage-point", "text": "At which points in the calculation was rounding applied, and was any intermediate result rounded?", "kind": "process", "answer_data": [ "ordered calculation steps", "rounding-applied flag per step", "single-final-rounding assertion where applicable", "handling rule for components that were already rounded" ] }, { "id": "money-policy-conversion-precision", "text": "When a value is derived by conversion, what precision governs the conversion factor and the intermediate result?", "kind": "requirement", "answer_data": [ "significant figures carried by the conversion factor", "whether inverse or derived factors are permitted", "minimum decimals retained in any intermediate amount", "the single final quantization step applied to the result" ] }, { "id": "money-policy-tier-mismatch-exception", "text": "What is reported when a consumer requires a precision tier the producer did not declare?", "kind": "exception", "answer_data": [ "requested tier", "tiers actually available", "refusal or derivation decision", "derivation rule reference where a tier is derived rather than refused" ] } ], "data_elements": [ { "id": "money-policy-precision-tier", "name": "Precision tier", "description": "The declared tier or tiers this amount belongs to, such as calculation, settlement, presentation or reporting.", "value_kind": "code", "cardinality": "1..n", "required": true, "source_refs": [ "SRC-018" ] }, { "id": "money-policy-tier-scale", "name": "Tier scale", "description": "Scale or increment associated with each declared tier, allowing calculation precision to exceed reporting precision explicitly.", "value_kind": "number", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-017" ] }, { "id": "money-policy-rounding-stage", "name": "Rounding stage", "description": "The point at which rounding was applied: per component, at a named intermediate step, or once at the final result.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-014", "SRC-018" ] }, { "id": "money-policy-intermediate-min-decimals", "name": "Intermediate minimum decimals", "description": "Minimum number of decimals that must be retained in an intermediate amount before the final quantization step.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-014" ] } ], "artifacts": [], "inline_only_rationale": "Precision tiers and rounding stages are parameters of the specific calculation that produced an amount; they are carried inline with the value and with the referenced quantization policy record. Emitting a separate artefact for every calculation would duplicate the host's process record without creating any independently governed object, and would imply this model owns the calculation itself." } ] } ] }, { "id": "money-policy-integrity-and-comparison", "name": "Numeric Integrity, Comparison and Reconciliation", "description": "What must be true before monetary values are treated as exact, compared, ordered, aggregated or split, and how failures and residuals are surfaced rather than silently absorbed.", "rationale": "Rounding differences become consequential at the point of comparison and allocation. Decimal arithmetic defines named exception signals for inexactness, overflow, underflow, clamping and invalid operations; exchange profiles carry rounding adjustments as explicit amounts; and endorsed reporting law makes materiality a judgement of the reporting entity. This bundle keeps those signals and thresholds visible instead of letting an implementation coerce a result into existence.", "source_refs": [ "SRC-006", "SRC-005", "SRC-013", "SRC-017", "SRC-010", "SRC-018", "SRC-019" ], "layers": [ { "id": "money-policy-numeric-integrity", "name": "Exactness, Bounds and Failure Signals", "description": "Whether a monetary value is exact, approximate or bounded, and how representability limits and arithmetic exceptions are recorded rather than hidden.", "source_refs": [ "SRC-006", "SRC-005", "SRC-013", "SRC-017", "SRC-010" ], "findings": [ { "id": "money-policy-exactness-and-bounded-values", "name": "Exact, approximate and bounded monetary values", "description": "Some amounts are exact, such as a stated payable sum; others are rounded, truncated, estimated or known only within bounds. The distinction must be declared, because comparison, aggregation and further rounding of an approximate value carry different guarantees, and the inexactness must be attributed to the operation that introduced it.", "source_refs": [ "SRC-005", "SRC-013", "SRC-017", "SRC-019" ], "questions": [ { "id": "money-policy-exactness-assertion", "text": "Is this amount asserted as exact, rounded, truncated or estimated within bounds?", "kind": "quality", "answer_data": [ "exactness status code", "supporting accuracy attribute or infinite-accuracy indicator", "whether an inexact condition was raised during derivation", "basis of the estimate where the value is not exact" ] }, { "id": "money-policy-value-bounds", "text": "If the value is bounded rather than point-valued, what are the bounds and how were they derived?", "kind": "measurement", "answer_data": [ "lower bound with currency binding", "upper bound with currency binding", "derivation method for the bounds", "confidence or basis statement supplied by the host" ] }, { "id": "money-policy-inexactness-provenance", "text": "Which operation introduced the inexactness, and was that recorded at the time the operation ran?", "kind": "provenance", "answer_data": [ "operation identifier and rule version", "signal raised: inexact, rounded or clamped", "value immediately before the operation", "event time of the operation, distinct from record capture time" ] }, { "id": "money-policy-exactness-propagation", "text": "How does exactness status propagate when this amount is combined with other amounts?", "kind": "relationship", "answer_data": [ "combination rule for exactness status", "weakest-status-wins propagation statement", "resulting exactness status of the combined value", "conditions under which combination must fail explicitly instead" ] } ], "data_elements": [ { "id": "money-policy-exactness-status", "name": "Exactness status", "description": "Whether the amount is exact, rounded, truncated, estimated or bounded.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-005", "SRC-017" ] }, { "id": "money-policy-value-lower-bound", "name": "Value lower bound", "description": "Lower bound of a bounded monetary value, expressed with the same currency binding as the value.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-019" ] }, { "id": "money-policy-value-upper-bound", "name": "Value upper bound", "description": "Upper bound of a bounded monetary value, expressed with the same currency binding as the value.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-019" ] }, { "id": "money-policy-inexact-signal", "name": "Inexactness signal raised", "description": "Whether an inexact or rounded condition was raised by the operation that produced the amount.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-005", "SRC-013" ] } ], "artifacts": [], "inline_only_rationale": "Exactness is an attribute of a single value and of the operation that produced it, so it belongs inline alongside the amount. The full derivation history that would explain it is a process record owned by the host system, which this mixin references rather than reproduces; creating an artefact here would pull host process ownership into the mixin." }, { "id": "money-policy-representability-and-failure-signals", "name": "Representability limits, overflow, underflow and explicit failure", "description": "Declared digit limits, profile-imposed total and fraction digit capacity, and arithmetic context precision all constrain what can be represented. When a value or an operation exceeds them the condition must be signalled by name rather than resolved by silent truncation, clamping, default rounding or coercion into binary floating point.", "source_refs": [ "SRC-006", "SRC-005", "SRC-013", "SRC-010" ], "questions": [ { "id": "money-policy-digit-capacity", "text": "What total-digit and fraction-digit capacity governs this value, and where does that limit originate?", "kind": "constraint", "answer_data": [ "maximum total digits", "maximum fraction digits", "source of the limit: arithmetic context, exchange profile or currency minor unit", "declared behaviour when the limit is reached" ] }, { "id": "money-policy-exception-signal-set", "text": "Which arithmetic exception conditions must be surfaced to the host, and by what names?", "kind": "requirement", "answer_data": [ "signal names: invalid-operation, overflow, underflow, inexact, rounded, clamped, subnormal, division-by-zero", "surfaced or suppressed decision recorded per signal", "payload fields accompanying each signal", "reference to the host's handling contract" ] }, { "id": "money-policy-coercion-prohibition", "text": "What behaviours are prohibited when a value cannot be represented at the required scale?", "kind": "exception", "answer_data": [ "prohibited behaviours: silent truncation, binary float coercion, unnamed default rounding", "required explicit failure response", "failure code returned", "remediation options offered to the caller" ] }, { "id": "money-policy-transport-fidelity", "text": "How is decimal fidelity preserved when the value crosses a representation boundary?", "kind": "interoperability", "answer_data": [ "transport form: decimal string or typed decimal", "declared total and fraction digit constraints at the boundary", "round-trip verification result", "known lossy hops in the exchange path" ] } ], "data_elements": [ { "id": "money-policy-max-total-digits", "name": "Maximum total digits", "description": "Digit capacity governing the value, such as the total-digit constraint imposed by an exchange profile or arithmetic context.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010" ] }, { "id": "money-policy-max-fraction-digits", "name": "Maximum fraction digits", "description": "Fraction-digit capacity governing the value at the applicable boundary.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010" ] }, { "id": "money-policy-raised-signals", "name": "Raised signal set", "description": "Named arithmetic conditions raised while producing or transporting the value.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-005", "SRC-013" ] }, { "id": "money-policy-failure-code", "name": "Failure code", "description": "Typed code returned when an operation cannot complete within the declared representability limits.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006", "SRC-013" ] }, { "id": "money-policy-transport-form", "name": "Transport form", "description": "The form in which the decimal value crosses a representation boundary, recorded so that fidelity claims can be checked.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010" ] } ], "artifacts": [], "inline_only_rationale": "Capacity limits and raised signals are inline attributes of the value and of the declared arithmetic context. What a runtime subsequently did with a signal — whether it retried, escalated or logged — is an execution and audit concern owned by the adopting Dimension's processing and audit facilities, so no artefact is produced here." } ] }, { "id": "money-policy-comparison-and-allocation", "name": "Comparison, Aggregation and Allocation Compatibility", "description": "The preconditions under which monetary values may be compared, ordered, aggregated or split, the tolerance the host supplies, and how residuals are assigned so that parts reconcile exactly to the whole.", "source_refs": [ "SRC-013", "SRC-014", "SRC-010", "SRC-018", "SRC-019" ], "findings": [ { "id": "money-policy-comparison-compatibility-and-tolerance", "name": "Compatibility gate and host-supplied tolerance for comparison and aggregation", "description": "Equality, ordering and aggregation are defined only for values in a compatible context: identical currency binding, compatible valuation basis, and a stated rounding context. Equality must also state whether it compares numeric value alone or value and quantum together. Tolerance and materiality thresholds are supplied by the host or reporting framework; the mixin records which threshold was applied and refuses incompatible operations rather than converting implicitly.", "source_refs": [ "SRC-013", "SRC-014", "SRC-010", "SRC-018", "SRC-019" ], "questions": [ { "id": "money-policy-compatibility-predicate", "text": "Which attributes must match before two monetary values may be compared or added?", "kind": "constraint", "answer_data": [ "currency code equality requirement", "valuation basis compatibility rule", "rounding context compatibility rule", "attributes deliberately ignored by the predicate" ] }, { "id": "money-policy-equality-semantics-choice", "text": "Does equality compare numeric value only, or numeric value together with scale and exponent?", "kind": "definition", "answer_data": [ "numeric-equality result", "same-quantum result", "selected equality semantics identifier", "documented consequence for sorting, deduplication and set membership" ] }, { "id": "money-policy-tolerance-source", "text": "What tolerance or materiality threshold applies to this comparison or reconciliation, and who set it?", "kind": "ownership", "answer_data": [ "tolerance as an absolute amount with currency or as a proportion", "threshold owner: host entity, reporting framework or scheme", "instrument or policy reference for the threshold", "scope over which the threshold applies" ] }, { "id": "money-policy-incompatible-response", "text": "What is returned when values are incompatible, and what must never happen implicitly?", "kind": "exception", "answer_data": [ "explicit refusal code", "named incompatible attributes", "statement prohibiting implicit conversion and implicit re-quantization", "the declared conversion the caller must perform and record first" ] }, { "id": "money-policy-aggregation-context", "text": "Under which single rounding and valuation context is an aggregate reported, and how is that context recorded with the result?", "kind": "decision", "answer_data": [ "rounding context selected for the aggregate", "valuation context identifier", "outcome of the member-value context check", "context stamped onto the aggregate result" ] } ], "data_elements": [ { "id": "money-policy-comparison-context-key", "name": "Comparison context key", "description": "Composite key of currency binding, valuation context and rounding context under which comparison, ordering or aggregation is permitted.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-010" ] }, { "id": "money-policy-equality-semantics", "name": "Equality semantics selection", "description": "Whether equality is numeric-value equality or value-and-quantum equality, recorded because numerically equal values may carry different exponents.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-013" ] }, { "id": "money-policy-tolerance-threshold", "name": "Tolerance threshold", "description": "Host-supplied absolute or proportional tolerance applied to a comparison or reconciliation check.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-018", "SRC-019" ] }, { "id": "money-policy-tolerance-owner", "name": "Tolerance owner reference", "description": "The party, framework or instrument that set the tolerance or materiality threshold.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-019" ] }, { "id": "money-policy-incompatibility-code", "name": "Incompatibility code", "description": "Typed reason returned when the compatibility predicate fails, naming which attribute prevented the operation.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-014" ] } ], "artifacts": [], "inline_only_rationale": "This finding states preconditions, equality semantics and refusal reasons that travel with the value and its policy reference; the comparison itself is executed by the host runtime. Producing an artefact would imply this model owns evaluation results and their retention, which belong to the adopting Dimension's processing and audit layers." }, { "id": "money-policy-allocation-residual-and-reconciliation", "name": "Allocation, residual assignment and reconciliation", "description": "Splitting a total into quantized parts almost always leaves a residual. The allocation rule, the deterministic input ordering, the recipient of the residual and the proof that the parts sum exactly to the total must all be recorded; profiles that permit a rounding adjustment carry it as an explicit disclosed amount rather than absorbing it into an arbitrary part.", "source_refs": [ "SRC-013", "SRC-014", "SRC-010", "SRC-018" ], "questions": [ { "id": "money-policy-allocation-rule", "text": "Which allocation rule distributes the total, and how are the quantized parts derived from it?", "kind": "process", "answer_data": [ "allocation rule identifier such as pro-rata, largest-remainder or sequential", "weights or basis used for the split", "per-part quantization rule reference", "deterministic ordering rule used to break ties" ] }, { "id": "money-policy-residual-assignment", "text": "Where is the residual assigned, and is it disclosed as an amount in its own right?", "kind": "decision", "answer_data": [ "residual amount with currency binding", "assignment target: a named part, a party or a separate adjustment line", "disclosure flag", "profile element used to carry the adjustment where one exists" ] }, { "id": "money-policy-reconciliation-proof", "text": "What evidence demonstrates that the allocated parts reconcile exactly to the total?", "kind": "evidence", "answer_data": [ "sum of the quantized parts", "declared total", "reconciliation difference, required to be zero after residual assignment", "reconciliation check identifier and outcome" ] }, { "id": "money-policy-allocation-repeatability", "text": "Is the allocation reproducible from the recorded inputs alone?", "kind": "validation", "answer_data": [ "recorded inputs together with their order", "allocation and quantization rule versions", "result of a deterministic re-run", "divergence report where the re-run does not match" ] } ], "data_elements": [ { "id": "money-policy-allocation-rule-ref", "name": "Allocation rule reference", "description": "Reference to the versioned allocation rule under which the total was distributed.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-018" ] }, { "id": "money-policy-residual-amount", "name": "Residual amount", "description": "The signed difference left by quantization, carried as an explicit amount with currency rather than absorbed silently.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-018" ] }, { "id": "money-policy-residual-target", "name": "Residual assignment target", "description": "The part, party or adjustment line to which the residual is assigned.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-018" ] }, { "id": "money-policy-reconciliation-difference", "name": "Reconciliation difference", "description": "Difference between the declared total and the sum of parts plus assigned residual; required to be zero for the allocation to be valid.", "value_kind": "quantity", "cardinality": "1", "required": true, "source_refs": [ "SRC-014" ] }, { "id": "money-policy-allocation-part", "name": "Allocation part", "description": "An individual quantized part with its basis, order position and resulting amount.", "value_kind": "collection", "cardinality": "1..n", "required": true, "source_refs": [ "SRC-013" ] } ], "artifacts": [ { "id": "money-policy-allocation-residual-statement", "name": "Allocation and residual statement", "description": "A record of one allocation run: the total, the rule and its version, the ordered quantized parts, the residual and its assigned target, and the reconciliation difference demonstrating that the parts and residual sum exactly to the total.", "media_or_form": [ "structured reconciliation record", "tabular part listing", "human-readable statement" ], "serial": true, "identity_strategy": "Identified by the host transaction or document identifier issued by the authoritative master system where one exists; otherwise by a governed IRI in the adopting Dimension's namespace; a ULID assigned by the Dimension only when neither exists. Allocation event time and the time the statement was recorded are stored as separate attributes and are never part of the identifier.", "source_refs": [ "SRC-014", "SRC-010", "SRC-018" ] } ], "inline_only_rationale": null } ] } ] }, { "id": "money-val-bundle-valuation-assertion", "name": "Valuation assertion context", "description": "The context that turns an amount into an interpretable valuation: which role the amount plays, at which instant it is asserted to hold, on which declared measurement basis, and against which market or scenario.", "rationale": "IAS 21 makes an amount meaningful only relative to a currency role and a translation date, and IFRS 13 makes a value meaningful only relative to a measurement date, a market-participant assumption set and a market. Both place the defining act outside the amount itself, so the amount must carry an explicit, versioned frame rather than an implicit one.", "source_refs": [ "SRC-020", "SRC-021", "SRC-022", "SRC-027" ], "layers": [ { "id": "money-val-layer-amount-role-frame", "name": "Amount role and temporal frame", "description": "Declares which role a monetary amount occupies among the sibling amounts derived from one underlying value, and the instant at which that role-tagged amount is asserted to hold.", "source_refs": [ "SRC-020", "SRC-024", "SRC-027" ], "findings": [ { "id": "money-val-finding-amount-role", "name": "Amount role pinned to a versioned classifier", "description": "Every monetary amount declares its role — original/transaction, settlement, functional, presentation or reported — as a value drawn from a named classifier at a pinned version, so that role-tagged siblings derived from one underlying value coexist and a converted amount can never silently stand in for the original.", "source_refs": [ "SRC-020", "SRC-025", "SRC-001" ], "questions": [ { "id": "money-val-q-role-classifier-pin", "text": "Which amount role does this monetary value carry, and from which classifier scheme and version is that role value drawn?", "kind": "classification", "answer_data": [ "Amount role code value", "Classifier scheme identifier", "Classifier scheme version pinned at assertion time" ] }, { "id": "money-val-q-role-instance-identity", "text": "What identifier distinguishes this amount instance from the other role-tagged amounts derived from the same underlying value?", "kind": "identity", "answer_data": [ "Amount instance identifier from the owning system of record", "Identifier of the underlying valued item or event", "Identifier issuing authority" ] }, { "id": "money-val-q-role-original-link", "text": "Which amount is the authoritative original that this role-tagged amount was derived from, and is that original still retrievable unchanged?", "kind": "relationship", "answer_data": [ "Reference to the original amount instance", "Derivation relation type", "Immutability confirmation for the original" ] }, { "id": "money-val-q-role-currency-constraint", "text": "Which combinations of amount role and currency are prohibited or mandatory for this subject class?", "kind": "constraint", "answer_data": [ "Allowed role-to-currency rules for the subject class", "Rule owner and rule version", "Rejection behaviour when a combination is violated" ] } ], "data_elements": [ { "id": "money-val-de-amount-role-code", "name": "Amount role code", "description": "Coded role of the amount within its valuation frame, for example original, transaction, settlement, functional, presentation or reported.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-020" ] }, { "id": "money-val-de-amount-role-scheme-version", "name": "Amount role scheme version", "description": "Identifier and version of the governed classifier from which the amount role code is drawn, pinned at the moment of assertion.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-020", "SRC-025" ] }, { "id": "money-val-de-amount-instance-id", "name": "Amount instance identifier", "description": "Identifier of this specific role-tagged amount, issued by the system of record that owns the valued item.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-001" ] }, { "id": "money-val-de-original-amount-ref", "name": "Original amount reference", "description": "Reference to the preserved original amount from which this amount was derived; absent only when this amount is itself the original.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-020" ] }, { "id": "money-val-de-amount-currency-code", "name": "Amount currency code", "description": "ISO 4217 alphabetic code, with numeric code and minor unit resolved from the maintenance agency register version applicable at the valuation instant.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-001", "SRC-025" ] } ], "artifacts": [], "inline_only_rationale": "An amount role is a single coded attribute plus a pinned scheme reference and a derivation link. It has no document form, no rendition and no lifecycle of its own; materialising it as an artifact would create a second identity for something that is already an attribute of the amount held by the owning record." }, { "id": "money-val-finding-valuation-instant", "name": "Valuation instant separated from observation, publication and ingestion", "description": "The instant or as-of point at which the amount is asserted to hold, recorded with seconds and an explicit offset, and kept in distinct fields from the underlying event instant, the instant the value was observed or derived, and the instant it was ingested into the adopting store.", "source_refs": [ "SRC-027", "SRC-020", "SRC-024" ], "questions": [ { "id": "money-val-q-valuation-instant", "text": "What is the valuation instant, expressed with seconds and an explicit offset, at which this amount is asserted to hold?", "kind": "temporal", "answer_data": [ "Valuation instant in RFC 3339 form with seconds and offset", "Declared precision of that instant", "Time zone or market session the offset represents" ] }, { "id": "money-val-q-observation-vs-ingestion", "text": "When was this value observed or derived, and when was it ingested into the adopting store?", "kind": "provenance", "answer_data": [ "Observation or derivation instant", "Ingestion instant", "Identity of the observing or deriving agent" ] }, { "id": "money-val-q-instant-vs-interval", "text": "Is the valuation point an instant, the closing point of a reporting period, or an interval, and how is that distinction encoded?", "kind": "definition", "answer_data": [ "Temporal kind code (instant, period-end, interval)", "Interval start and end where applicable", "Rule linking the period-end to a specific instant" ] }, { "id": "money-val-q-instant-underdetermined", "text": "What is recorded when the valuation point cannot be determined more precisely than a calendar date?", "kind": "exception", "answer_data": [ "Date-only marker with an explicit precision code", "Convention used to widen the date to an interval", "Prohibition on treating the date as an identifier" ] } ], "data_elements": [ { "id": "money-val-de-valuation-instant", "name": "Valuation instant", "description": "RFC 3339 date-time with seconds and explicit offset at which the amount is asserted to hold.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-027", "SRC-020" ] }, { "id": "money-val-de-valuation-temporal-kind", "name": "Valuation temporal kind", "description": "Whether the valuation point is an instant, a reporting-period end, or an as-of interval.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-020", "SRC-024" ] }, { "id": "money-val-de-valuation-instant-precision", "name": "Valuation instant precision", "description": "Declared precision of the valuation instant (second, minute, session, day) used when the source does not publish a sub-day time.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-027" ] }, { "id": "money-val-de-observation-instant", "name": "Observation or derivation instant", "description": "Instant at which the value was observed or computed, distinct from the instant it is asserted to hold.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-027", "SRC-024" ] }, { "id": "money-val-de-ingestion-instant", "name": "Ingestion instant", "description": "Instant at which the assertion entered the adopting store, never used as a proxy for valuation or event time.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-027" ] }, { "id": "money-val-de-event-instant-ref", "name": "Underlying event instant reference", "description": "Reference to the instant of the underlying business event held by the owning model, when it differs from the valuation instant.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-020" ] } ], "artifacts": [], "inline_only_rationale": "These are four or five timestamp fields and a precision code. Their whole value lies in being queryable attributes of the assertion; rendering them as a separate artifact would break the atomicity that keeps event, valuation, observation and ingestion time from collapsing into one another." } ] }, { "id": "money-val-layer-valuation-basis", "name": "Measurement basis and market or scenario reference", "description": "Captures which measurement basis was asserted, who is entitled to designate it, which market, venue, session or scenario it refers to, and how a non-exchangeable currency is handled — all as references, never as an implementation of the basis.", "source_refs": [ "SRC-021", "SRC-020", "SRC-022", "SRC-023" ], "findings": [ { "id": "money-val-finding-valuation-basis-market", "name": "Declared basis, designating authority and market or scenario reference", "description": "Records the asserted measurement basis (for example historical cost at the transaction-date rate, closing rate, period average, or fair value at a measurement date), the standard or policy that defines it, the authority entitled to designate it, and the market, venue, session or scenario the valuation refers to, including the case where the currency is not exchangeable and an estimated rate must be asserted.", "source_refs": [ "SRC-021", "SRC-020", "SRC-022", "SRC-023" ], "questions": [ { "id": "money-val-q-basis-definition", "text": "Which measurement basis is asserted for this amount, and which external standard or internal policy defines that basis?", "kind": "definition", "answer_data": [ "Basis code value and scheme version", "Reference to the defining standard clause or policy document", "Statement that this model references but does not implement the basis" ] }, { "id": "money-val-q-basis-authority", "text": "Which body or policy owner is entitled to designate the measurement basis for this subject, and when was that designation made?", "kind": "authority", "answer_data": [ "Designating authority identifier", "Designation decision reference and instant", "Scope of subjects the designation covers" ] }, { "id": "money-val-q-basis-market-reference", "text": "Which market, venue, trading session or scenario does the valuation refer to?", "kind": "spatial", "answer_data": [ "Market, venue or session identifier", "Session opening and closing convention with offset", "Scenario identifier where the valuation is scenario-conditional" ] }, { "id": "money-val-q-basis-exchangeability", "text": "How is the valuation recorded when the currency is not exchangeable into the target currency at the valuation instant?", "kind": "exception", "answer_data": [ "Exchangeability status flag", "Estimated-rate indicator and the estimation approach reference", "Disclosure or annotation reference required by the governing standard" ] } ], "data_elements": [ { "id": "money-val-de-basis-code", "name": "Measurement basis code", "description": "Coded measurement basis asserted for the amount, drawn from a governed, versioned classifier.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-021", "SRC-020" ] }, { "id": "money-val-de-basis-authority-ref", "name": "Basis defining authority reference", "description": "Reference to the standard clause, regulation or internal policy that defines the asserted basis, and to the body entitled to designate it.", "value_kind": "reference", "cardinality": "1..n", "required": true, "source_refs": [ "SRC-021", "SRC-028" ] }, { "id": "money-val-de-market-or-scenario-ref", "name": "Market, session or scenario reference", "description": "Reference to the market, venue, trading session or named scenario the valuation is conditioned on.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-021", "SRC-023" ] }, { "id": "money-val-de-exchangeability-status", "name": "Currency exchangeability status", "description": "Whether the source currency was exchangeable into the target currency at the valuation instant, and for which purpose.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-022", "SRC-020" ] }, { "id": "money-val-de-estimated-rate-flag", "name": "Estimated rate indicator", "description": "Marks that the applied rate was estimated rather than observed, with a reference to the estimation approach declared by the asserter.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-022" ] } ], "artifacts": [], "inline_only_rationale": "The basis and its market reference are pointers into standards, policies and venue registers owned elsewhere. Creating a local artifact for a basis would import the defining standard's content into this model and invite drift from the authoritative text; a versioned reference plus the designation decision is the complete and falsifiable representation." } ] } ] }, { "id": "money-val-bundle-rate-quotation", "name": "Exchange rate quotation context", "description": "Everything needed to interpret an exchange rate applied to a valuation: which currencies in which direction under which unit convention, at what value and precision, from which source under which methodology, for which market session, valid over which interval, and at what quality status.", "rationale": "Authoritative publishers disagree on direction and revision policy — the ECB quotes EUR 1 = x foreign currency units and discourages transaction use, while the Federal Reserve publishes New York noon buying rates and does not revise past releases. A rate value stored without explicit base, quote, direction, source, session, validity and status is therefore not interpretable and not reproducible.", "source_refs": [ "SRC-023", "SRC-024", "SRC-028", "SRC-029", "SRC-031" ], "layers": [ { "id": "money-val-layer-quotation-frame", "name": "Currency pair, direction and quoted value", "description": "Fixes which currency is base and which is quote, how many base units the rate prices, whether the stored value is the published direction or an inversion, and the numeric value with its declared accuracy.", "source_refs": [ "SRC-023", "SRC-024", "SRC-026", "SRC-001", "SRC-029", "SRC-031" ], "findings": [ { "id": "money-val-finding-pair-direction-rate-value", "name": "Base and quote currency, unit convention and rate value precision", "description": "Records the ordered currency pair with an explicit unit convention (how many units of quote currency price N units of base currency), whether the stored value is as published or inverted, and the rate value together with the number of decimal places to which it is accurate — never a bare number whose direction is inferred from field naming.", "source_refs": [ "SRC-023", "SRC-024", "SRC-026", "SRC-001", "SRC-029", "SRC-031" ], "questions": [ { "id": "money-val-q-pair-direction", "text": "Which currency is base and which is quote for this quotation, and how many base units does the rate value price?", "kind": "definition", "answer_data": [ "Base currency ISO 4217 code", "Quote currency ISO 4217 code", "Number of base currency units priced by the rate value" ] }, { "id": "money-val-q-rate-value-accuracy", "text": "What is the rate value and to how many decimal places is it accurate as published?", "kind": "measurement", "answer_data": [ "Rate value as an exact decimal", "Declared decimals or accuracy statement from the publisher", "Whether the published value is exact or rounded" ] }, { "id": "money-val-q-rate-inversion", "text": "Is the stored rate held in the publisher's direction or as an inverted value, and how is inversion flagged?", "kind": "constraint", "answer_data": [ "Published-direction rate value", "Inversion indicator and the inversion precision rule", "Prohibition on storing an inverted value in place of the published one" ] }, { "id": "money-val-q-direction-interoperability", "text": "How does the stored direction map to a consumer or publisher whose quotation convention is the opposite?", "kind": "interoperability", "answer_data": [ "Publisher convention identifier", "Mapping rule to the consumer's convention", "Round-trip tolerance when inversion and re-inversion are applied" ] } ], "data_elements": [ { "id": "money-val-de-base-currency-code", "name": "Base currency code", "description": "ISO 4217 code of the currency whose units are priced by the rate.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-001", "SRC-024" ] }, { "id": "money-val-de-quote-currency-code", "name": "Quote currency code", "description": "ISO 4217 code of the currency in which the price of the base currency is expressed.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-001", "SRC-024" ] }, { "id": "money-val-de-rate-unit-count", "name": "Rate unit count", "description": "Number of base currency units the rate value prices, typically one but explicitly recorded for currencies quoted per hundred or per thousand.", "value_kind": "number", "cardinality": "1", "required": true, "source_refs": [ "SRC-023", "SRC-029" ] }, { "id": "money-val-de-rate-value", "name": "Rate value", "description": "Exact decimal rate value as published in the publisher's direction, stored without any scaling multiplier.", "value_kind": "quantity", "cardinality": "1", "required": true, "source_refs": [ "SRC-023", "SRC-026" ] }, { "id": "money-val-de-rate-decimals", "name": "Rate declared accuracy", "description": "Number of decimal places to which the rate value is accurate, or an exactness marker where the publisher states the value is exact.", "value_kind": "number", "cardinality": "1", "required": true, "source_refs": [ "SRC-026", "SRC-024" ] }, { "id": "money-val-de-rate-inverted-flag", "name": "Rate inversion indicator", "description": "Marks a stored value derived by inverting the published direction, retained alongside rather than replacing the published value.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-023", "SRC-029" ] } ], "artifacts": [], "inline_only_rationale": "Direction, unit convention and value are the smallest queryable fields on which every downstream calculation depends; they must be filterable and comparable rather than embedded in a document. The publisher's own rendition is captured separately under reproducibility evidence, so no artifact is needed here." } ] }, { "id": "money-val-layer-rate-provenance", "name": "Rate source, type, validity and status", "description": "Establishes who produced the rate under which methodology, what kind of rate it is, which market session it applies to, over which interval it is valid, when it was published and retrieved, and whether it is provisional, final, estimated or stale.", "source_refs": [ "SRC-023", "SRC-024", "SRC-028", "SRC-029", "SRC-030" ], "findings": [ { "id": "money-val-finding-rate-source-and-type", "name": "Rate type, publishing source and applicable market session", "description": "Identifies the kind of rate asserted (spot, closing, period average, fixing, estimated) from a pinned rate-type classifier, the named publisher or administrator with its published methodology identifier, the resolvable series or dataset key in the owning publication model, and the market session the rate applies to.", "source_refs": [ "SRC-024", "SRC-023", "SRC-028", "SRC-029", "SRC-030" ], "questions": [ { "id": "money-val-q-rate-source-provenance", "text": "Which named publisher or administrator produced this rate, and under which published methodology identifier?", "kind": "provenance", "answer_data": [ "Publisher or administrator identifier", "Methodology identifier and version", "Publisher's stated purpose or usage restriction for the rate" ] }, { "id": "money-val-q-rate-type-classification", "text": "What rate type is asserted, drawn from which pinned rate-type code list and version?", "kind": "classification", "answer_data": [ "Rate type code, for example spot or period average", "Rate-type scheme identifier and pinned version", "Series variation or suffix distinguishing averages from end-of-period values" ] }, { "id": "money-val-q-rate-source-authority", "text": "Is this source designated as authoritative for this subject class, and by whose decision was it admitted?", "kind": "authority", "answer_data": [ "Admissibility decision reference and approver", "Subject classes the designation covers", "Fallback ordering when the primary source is unavailable" ] }, { "id": "money-val-q-rate-series-resolution", "text": "Which series or observation key in the owning publication model does this rate reference resolve to?", "kind": "relationship", "answer_data": [ "Dataflow or dataset identifier", "Ordered series key dimensions such as frequency, currency, currency denominator, rate type and suffix", "Observation key within the series" ] } ], "data_elements": [ { "id": "money-val-de-rate-source-id", "name": "Rate source identifier", "description": "Identifier of the publisher, administrator or contributor that determined and published the rate.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-028", "SRC-023" ] }, { "id": "money-val-de-rate-methodology-ref", "name": "Rate methodology reference", "description": "Reference to the publisher's documented methodology or benchmark statement, held as a citation rather than a copy.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-028", "SRC-030" ] }, { "id": "money-val-de-rate-type-code", "name": "Rate type code", "description": "Coded kind of rate, for example spot, closing, period average or fixing, drawn from a pinned classifier.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-024", "SRC-020" ] }, { "id": "money-val-de-rate-series-key-ref", "name": "Rate series and observation key reference", "description": "Resolvable key into the owning publication model identifying the exact series and observation used.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-024" ] }, { "id": "money-val-de-market-session-code", "name": "Applicable market session", "description": "Market, venue or fixing session the rate applies to, including the session time and its offset where the publisher defines one.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-023", "SRC-029" ] }, { "id": "money-val-de-source-usage-restriction", "name": "Source usage restriction note", "description": "The publisher's own stated limitation on use, for example that reference rates are published for information and transaction use is discouraged.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-023" ] } ], "artifacts": [], "inline_only_rationale": "Source, methodology and series key are references into a publication model that owns the rate series and its determination. Holding them as attributes keeps the boundary intact; creating a local artifact would begin to mirror the publisher's record and would drift from the authoritative series." }, { "id": "money-val-finding-rate-validity-and-status", "name": "Rate validity interval, publication and retrieval instants, and quality status", "description": "Records the interval over which the referenced rate is valid for this valuation, the instant the publisher released it, the instant the adopting system retrieved it, and the quality status — provisional, final, estimated or stale — together with the staleness tolerance that was applied when the rate was accepted.", "source_refs": [ "SRC-023", "SRC-024", "SRC-028", "SRC-029", "SRC-027" ], "questions": [ { "id": "money-val-q-rate-effective-interval", "text": "Over which effective or as-of interval is the referenced rate valid for this valuation?", "kind": "temporal", "answer_data": [ "Effective interval start with seconds and offset", "Effective interval end or open-ended marker", "Rule applied when the valuation instant falls on a non-publication day" ] }, { "id": "money-val-q-rate-status-state", "text": "What quality status does the rate carry at the moment it is bound to this valuation?", "kind": "state", "answer_data": [ "Status code among provisional, final, estimated and stale", "Status assigning party", "Instant at which the status was determined" ] }, { "id": "money-val-q-rate-staleness-tolerance", "text": "What staleness tolerance was applied when this rate was accepted, and who set that tolerance?", "kind": "quality", "answer_data": [ "Maximum permitted age between rate effective instant and valuation instant", "Tolerance owner and policy version", "Behaviour on breach: reject, flag or escalate" ] }, { "id": "money-val-q-rate-publication-retrieval", "text": "When was the rate published by its source and when was it retrieved by the adopting system?", "kind": "evidence", "answer_data": [ "Publication instant with offset", "Retrieval instant with offset", "Retrieval channel or endpoint reference" ] } ], "data_elements": [ { "id": "money-val-de-rate-effective-start", "name": "Rate effective interval start", "description": "Instant from which the referenced rate is treated as applicable.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-027", "SRC-023" ] }, { "id": "money-val-de-rate-effective-end", "name": "Rate effective interval end", "description": "Instant at which the referenced rate ceases to be applicable, or an explicit open-ended marker.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-027", "SRC-023" ] }, { "id": "money-val-de-rate-publication-instant", "name": "Rate publication instant", "description": "Instant the publisher released the rate, distinct from the determination or concertation time it represents.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-023", "SRC-029" ] }, { "id": "money-val-de-rate-retrieval-instant", "name": "Rate retrieval instant", "description": "Instant the adopting system obtained the rate from the source.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-027" ] }, { "id": "money-val-de-rate-status-code", "name": "Rate quality status", "description": "Coded status of the rate as bound: provisional, final, estimated or stale.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-024", "SRC-022" ] }, { "id": "money-val-de-staleness-tolerance", "name": "Applied staleness tolerance", "description": "Maximum permitted age of the rate relative to the valuation instant, as declared by the caller or the adopting Dimension.", "value_kind": "duration", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-028" ] } ], "artifacts": [], "inline_only_rationale": "Validity, publication, retrieval and status are timestamp and code fields that must be individually queryable to answer whether a stored valuation was built on a stale or provisional rate. The verbatim publisher response that evidences them is captured once, under reproducibility evidence, rather than duplicated here." } ] } ] }, { "id": "money-val-bundle-conversion-assurance", "name": "Conversion derivation, linkage and assurance", "description": "How a converted amount is derived from an original, what equation and rounding order produced it, how original, converted and separately referenced charges relate, what evidence makes the result reproducible, and how a valuation assertion is corrected or superseded.", "rationale": "XBRL guidance shows that rounding order and declared accuracy determine whether reported components reconcile at all, ECB practice makes cross rates a derived rather than published quantity, and the divergent revision regimes of the Federal Reserve and EU benchmark administrators mean a valuation must carry its own correction semantics rather than inheriting the publisher's.", "source_refs": [ "SRC-023", "SRC-025", "SRC-026", "SRC-028", "SRC-001", "SRC-029" ], "layers": [ { "id": "money-val-layer-conversion-derivation", "name": "Derivation, computation and amount linkage", "description": "The mechanics of arriving at a converted amount and of relating it to the preserved original and to separately referenced charge components.", "source_refs": [ "SRC-023", "SRC-025", "SRC-026", "SRC-001", "SRC-030" ], "findings": [ { "id": "money-val-finding-derivation-and-chain", "name": "Derivation method and ordered rate chain", "description": "Declares whether the applied rate is direct, inverse, cross or triangulated, and where it is not direct, the ordered chain of constituent rate references with pivot currencies, so that a cross rate is recognisable as a derived quantity rather than a published one.", "source_refs": [ "SRC-023", "SRC-024", "SRC-031" ], "questions": [ { "id": "money-val-q-derivation-method", "text": "Is the applied rate direct, inverse, cross or triangulated?", "kind": "classification", "answer_data": [ "Derivation method code", "Justification for not using a direct quotation where one exists", "Method scheme version" ] }, { "id": "money-val-q-chain-composition", "text": "Which ordered constituent rates and pivot currencies make up the chain used to reach the target currency?", "kind": "composition", "answer_data": [ "Ordered list of constituent rate references", "Pivot currency codes", "Step ordinal for each constituent" ] }, { "id": "money-val-q-chain-rounding-points", "text": "At which steps of the chain is intermediate rounding permitted, and at which is it prohibited?", "kind": "constraint", "answer_data": [ "Per-step rounding permission flags", "Intermediate working precision", "Rule owner for the chain rounding policy" ] }, { "id": "money-val-q-chain-cross-check", "text": "How is the derived chain result checked against an independently published direct quotation when one exists?", "kind": "validation", "answer_data": [ "Reference to the independent direct quotation", "Permitted divergence between chained and direct results", "Action taken when divergence exceeds the threshold" ] } ], "data_elements": [ { "id": "money-val-de-derivation-method-code", "name": "Derivation method code", "description": "Coded derivation of the applied rate: direct, inverse, cross or triangulated.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-023", "SRC-031" ] }, { "id": "money-val-de-rate-chain-step", "name": "Rate chain step", "description": "Ordered constituent of a derived rate, carrying its own rate reference, base and quote currencies, step ordinal and rounding permission.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-023", "SRC-024" ] }, { "id": "money-val-de-pivot-currency-code", "name": "Pivot currency code", "description": "ISO 4217 code of the intermediate currency through which a cross or triangulated rate was derived.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-001", "SRC-023" ] }, { "id": "money-val-de-chain-working-precision", "name": "Chain working precision", "description": "Decimal precision maintained for intermediate results before the final rounding step.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-026" ] } ], "artifacts": [], "inline_only_rationale": "A rate chain is an ordered list of references plus per-step flags. It must be traversable and comparable step by step during recomputation, which an opaque artifact would obstruct; the chain's supporting captures live with the evidence package instead." }, { "id": "money-val-finding-conversion-equation-rounding", "name": "Conversion equation, rounding order and precision outcome", "description": "Records the exact equation applied — including whether the rate was multiplied or divided and in which order chaining and rounding occurred — the target minor unit and rounding mode, and the tolerance within which a recomputation must reproduce the stored converted amount.", "source_refs": [ "SRC-025", "SRC-026", "SRC-001", "SRC-020" ], "questions": [ { "id": "money-val-q-conversion-equation", "text": "Which exact equation, including multiplication or division direction, produced the converted amount?", "kind": "process", "answer_data": [ "Equation expression in an unambiguous notation", "Operand bindings to the original amount and each rate reference", "Statement of the direction convention the equation assumes" ] }, { "id": "money-val-q-rounding-order", "text": "In which order were conversion, chaining and rounding applied?", "kind": "constraint", "answer_data": [ "Ordered list of computation and rounding steps", "Points at which precision was reduced", "Whether component amounts were rounded before or after aggregation" ] }, { "id": "money-val-q-rounding-precision-outcome", "text": "To which minor unit or decimal precision was the converted amount rounded, and under which rounding mode?", "kind": "measurement", "answer_data": [ "Target currency minor unit from the ISO 4217 register", "Rounding mode code", "Declared accuracy of the converted amount and whether it is exact or rounded" ] }, { "id": "money-val-q-recomputation-tolerance", "text": "What residual difference between a recomputation and the stored value is tolerated before the record is flagged?", "kind": "requirement", "answer_data": [ "Absolute or minor-unit tolerance", "Tolerance owner and policy version", "Flagging and escalation behaviour on breach" ] } ], "data_elements": [ { "id": "money-val-de-conversion-equation", "name": "Conversion equation expression", "description": "Unambiguous expression of the computation applied, with explicit operand roles and rate direction.", "value_kind": "text", "cardinality": "1", "required": true, "source_refs": [ "SRC-026", "SRC-020" ] }, { "id": "money-val-de-rounding-mode-code", "name": "Rounding mode code", "description": "Coded rounding mode applied at each reduction of precision.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-026" ] }, { "id": "money-val-de-rounding-step-order", "name": "Rounding step order", "description": "Ordered record of computation and rounding steps, showing where precision was reduced.", "value_kind": "collection", "cardinality": "1..n", "required": true, "source_refs": [ "SRC-026", "SRC-025" ] }, { "id": "money-val-de-target-minor-unit", "name": "Target currency minor unit", "description": "Minor unit exponent of the target currency taken from the ISO 4217 register version applicable at the valuation instant.", "value_kind": "number", "cardinality": "1", "required": true, "source_refs": [ "SRC-001" ] }, { "id": "money-val-de-converted-amount-value", "name": "Converted amount value", "description": "Exact decimal result of the conversion, stored with its declared accuracy and without any scaling multiplier.", "value_kind": "quantity", "cardinality": "1", "required": true, "source_refs": [ "SRC-025", "SRC-026" ] }, { "id": "money-val-de-recomputation-tolerance", "name": "Recomputation tolerance", "description": "Permitted residual difference between an independent recomputation and the stored converted amount.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-026" ] } ], "artifacts": [], "inline_only_rationale": "The equation, rounding order and tolerance are the executable specification of the stored number and must be readable as fields by any agent attempting recomputation. They are bundled into the evidence artifact only as part of a complete reproduction package, not held separately as a document here." }, { "id": "money-val-finding-original-converted-linkage", "name": "Original-to-converted linkage with separately referenced charges", "description": "Establishes the converted amount as a derived sibling that links back to an unchanged original, designates which amount is reported when the two differ, and keeps fees, spreads, mark-ups and taxes as references to their owning models rather than absorbing them into the rate or the converted amount.", "source_refs": [ "SRC-020", "SRC-030", "SRC-028", "SRC-025" ], "questions": [ { "id": "money-val-q-linkage-original-preserved", "text": "Which original amount does this converted amount derive from, and is that original preserved unchanged?", "kind": "relationship", "answer_data": [ "Original amount reference and its currency", "Derivation link type and direction", "Immutability evidence for the original" ] }, { "id": "money-val-q-linkage-charge-components", "text": "Which fee, spread, mark-up or tax components are referenced alongside this conversion, and in which model do they live?", "kind": "composition", "answer_data": [ "Charge component references with component type", "Owning model identifier for each component", "Confirmation that no component is embedded in the rate value" ] }, { "id": "money-val-q-linkage-reported-designation", "text": "Which amount is designated as the reported value when the original and converted amounts diverge?", "kind": "decision", "answer_data": [ "Reported amount designation and its role code", "Designating rule and its owner", "Retention requirement for the non-designated sibling" ] }, { "id": "money-val-q-linkage-rate-purity", "text": "What prevents a mark-up or spread from being absorbed into the recorded exchange rate?", "kind": "constraint", "answer_data": [ "Validation rule comparing recorded rate to the referenced source rate", "Permitted divergence and its justification field", "Rejection behaviour when an unexplained divergence is detected" ] } ], "data_elements": [ { "id": "money-val-de-converted-amount-ref", "name": "Converted amount reference", "description": "Reference from the original amount to each amount derived from it by conversion.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-020" ] }, { "id": "money-val-de-charge-component-ref", "name": "Charge component reference", "description": "Reference to a fee, spread, mark-up or tax component held in its owning model, with a component type code.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-030", "SRC-028" ] }, { "id": "money-val-de-reported-amount-designation", "name": "Reported amount designation", "description": "Indicates which of the linked role-tagged amounts is designated as the reported value, and under which rule.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-020", "SRC-025" ] }, { "id": "money-val-de-rate-purity-divergence", "name": "Recorded-to-source rate divergence", "description": "Difference between the recorded applied rate and the referenced source rate, retained with an explanation when non-zero.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-030", "SRC-023" ] } ], "artifacts": [], "inline_only_rationale": "Linkage is a set of typed references and one designation code. Materialising it would create a third object competing with the two amounts it relates, which is precisely the ambiguity the linkage exists to remove; the charge components themselves are owned by other models and must not be copied here." } ] }, { "id": "money-val-layer-assurance-correction", "name": "Reproducibility evidence and correction", "description": "What must be retained for an independent party to recompute a converted amount, and how a valuation assertion is corrected or superseded without mutating history.", "source_refs": [ "SRC-023", "SRC-024", "SRC-028", "SRC-029", "SRC-026" ], "findings": [ { "id": "money-val-finding-reproducibility-evidence", "name": "Reproducibility evidence for a valuation assertion", "description": "The minimum retained reference set that lets an independent party recompute the converted amount: pinned rate reference and series key, pinned classifier versions, the equation and rounding parameters, and a capture of the source response at retrieval. The package holds references and parameters, not a mirror of the publisher's authoritative record, and it is not the adopting Dimension's audit trail.", "source_refs": [ "SRC-023", "SRC-024", "SRC-026", "SRC-028" ], "questions": [ { "id": "money-val-q-evidence-minimum-set", "text": "Which minimum set of references and parameters must be retained for an independent party to recompute this converted amount?", "kind": "evidence", "answer_data": [ "Enumerated reproduction inputs with their references", "Pinned classifier and register versions", "Completeness check result for the reproduction set" ] }, { "id": "money-val-q-evidence-recomputation", "text": "How is a recomputation confirmed to reproduce the stored converted amount at the declared precision?", "kind": "validation", "answer_data": [ "Recomputation result and residual difference", "Comparison against the declared tolerance", "Outcome state: reproduced, within tolerance, or disputed" ] }, { "id": "money-val-q-evidence-source-capture", "text": "What captures the exact response received from the rate source at retrieval time?", "kind": "provenance", "answer_data": [ "Verbatim or normalised capture of the source response", "Retrieval endpoint and channel reference", "Content digest and digest algorithm over the capture" ] }, { "id": "money-val-q-evidence-access", "text": "Who may read the reproduction package, and which parts are withheld when the source licence limits redistribution?", "kind": "access", "answer_data": [ "Entitled principal classes", "Licence marker and redistribution restriction on the capture", "Substitute returned to non-entitled principals" ] } ], "data_elements": [ { "id": "money-val-de-reproduction-input-set", "name": "Reproduction input set", "description": "Enumerated references and parameters required to recompute the converted amount, each with its pinned version.", "value_kind": "collection", "cardinality": "1..n", "required": true, "source_refs": [ "SRC-024", "SRC-026" ] }, { "id": "money-val-de-evidence-digest", "name": "Evidence content digest", "description": "Digest over the canonical serialisation of the evidence package, with the digest algorithm identifier.", "value_kind": "text", "cardinality": "1", "required": true, "source_refs": [ "SRC-028" ] }, { "id": "money-val-de-recomputation-outcome", "name": "Recomputation outcome", "description": "Result of an independent recomputation: reproduced, within tolerance, or disputed, with the residual difference.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-026" ] }, { "id": "money-val-de-capture-licence-marker", "name": "Capture licence marker", "description": "Redistribution restriction asserted by the rate source over the retained capture.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-023", "SRC-029" ] } ], "artifacts": [ { "id": "money-val-artifact-conversion-evidence-package", "name": "Conversion evidence package", "description": "A bounded, digest-protected collection of the references and parameters needed to reproduce one conversion: rate reference and series key, classifier and register versions, derivation chain, equation, rounding parameters and tolerance. It contains no copy of the publisher's authoritative series and carries no audit-trail semantics.", "media_or_form": [ "structured evidence record", "attachable reference set", "archive manifest" ], "serial": false, "identity_strategy": "Identified by the valuation assertion's authoritative master-system identifier plus a package revision counter; the package never mints an identity independent of the assertion it evidences, and no date component appears in the identifier.", "source_refs": [ "SRC-024", "SRC-026", "SRC-028" ] }, { "id": "money-val-artifact-rate-quotation-capture", "name": "Rate quotation capture", "description": "An immutable capture of the response actually received from the rate source at retrieval, retained as evidence of what was bound. It is a citation-grade snapshot subject to the source's licence, not a replication of the publisher's series and not a substitute for the publisher's record.", "media_or_form": [ "verbatim source response file", "normalised structured record", "citation reference" ], "serial": false, "identity_strategy": "Identified by the publisher's series and observation key combined with the rate effective instant and the retrieval instant; where the publisher issues no key, a Dimension-minted ULID is used and the publisher reference is retained as an attribute.", "source_refs": [ "SRC-023", "SRC-024", "SRC-029" ] } ], "inline_only_rationale": null }, { "id": "money-val-finding-correction-supersession", "name": "Correction and supersession of a valuation assertion", "description": "How a previously asserted valuation is corrected or withdrawn: a new assertion supersedes the prior one with a reason, an effective interval and an issuer identity, while the superseded assertion is retained unmutated. Notification delivery, audit persistence and retention execution belong to the referenced models.", "source_refs": [ "SRC-023", "SRC-028", "SRC-029", "SRC-020" ], "questions": [ { "id": "money-val-q-correction-lifecycle", "text": "Through which states does a valuation assertion move from asserted to superseded or withdrawn?", "kind": "lifecycle", "answer_data": [ "Enumerated assertion states and permitted transitions", "State transition instants with offsets", "Terminal states and their irreversibility" ] }, { "id": "money-val-q-correction-trigger", "text": "What triggers a correction — a revised source rate, a wrong classifier binding, or a rounding defect?", "kind": "event", "answer_data": [ "Correction reason code", "Reference to the triggering event or publisher notice", "Detection method: recomputation, reconciliation or external notification" ] }, { "id": "money-val-q-correction-retention", "text": "How long must a superseded assertion and its evidence remain retrievable, and under whose policy?", "kind": "retention", "answer_data": [ "Minimum retention duration and the regime that sets it", "Owning retention policy or model reference", "Disposition action at end of retention and who executes it" ] }, { "id": "money-val-q-correction-ownership", "text": "Who is accountable for issuing a correction and for informing downstream consumers of the superseded value?", "kind": "ownership", "answer_data": [ "Issuer identity and authorisation basis", "Approving reviewer independent of the consumer", "Downstream notification reference handled by the notifying model" ] } ], "data_elements": [ { "id": "money-val-de-assertion-state", "name": "Valuation assertion state", "description": "Current state of the assertion: asserted, disputed, superseded or withdrawn.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-028" ] }, { "id": "money-val-de-superseded-assertion-ref", "name": "Superseded assertion reference", "description": "Reference from a correcting assertion to the assertion it replaces, retained permanently.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-028", "SRC-029" ] }, { "id": "money-val-de-correction-reason-code", "name": "Correction reason code", "description": "Coded cause of the correction, for example source revision, misbinding, rounding defect or currency suspension.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-023", "SRC-028" ] }, { "id": "money-val-de-correction-issuer-id", "name": "Correction issuer identity", "description": "Identity of the principal issuing the correction and of the independent approver.", "value_kind": "identifier", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-028" ] }, { "id": "money-val-de-correction-effective-interval", "name": "Correction effective interval", "description": "Interval over which the correcting assertion is effective, with start and end in RFC 3339 form.", "value_kind": "duration", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-027" ] } ], "artifacts": [ { "id": "money-val-artifact-valuation-correction-notice", "name": "Valuation correction notice", "description": "A serially numbered record stating that a named valuation assertion has been corrected or withdrawn, with the reason, the superseding assertion reference, the effective interval and the issuer and approver identities. It is handed to the referenced notification and audit models, which own delivery and persistence.", "media_or_form": [ "structured correction record", "human-readable notice" ], "serial": true, "identity_strategy": "Identified by the superseded assertion's authoritative master-system identifier plus a zero-padded monotonic correction serial; the serial never resets, gaps are not reused, and no date component appears in the identifier.", "source_refs": [ "SRC-028", "SRC-029", "SRC-023" ] } ], "inline_only_rationale": null } ] } ] }, { "id": "money-govctl-bundle-authority-lifecycle", "name": "Authority, accountability and monetary assertion lifecycle", "description": "Who may assert, correct or re-base a monetary value on its host, how that assertion is identified without an independent identity, and how it is versioned, made effective, corrected and superseded against pinned normative references.", "rationale": "Authorization of transactions and review/approval of period-end adjustments are control objectives in their own right (SRC-040), while the identity of a monetary fact is derived from concept, context and unit rather than from a standalone key (SRC-017). Currency code lists change by published amendment (SRC-001) and mandated rate sources differ by jurisdiction (SRC-039), so version pinning belongs with lifecycle rather than with representation.", "source_refs": [ "SRC-001", "SRC-017", "SRC-039", "SRC-040" ], "layers": [ { "id": "money-govctl-layer-accountability-authority", "name": "Accountable roles and change authority", "description": "Advisory declarations of who is accountable for a monetary value and who is competent to change its amount, its currency, its rate source or the rounding policy applied to it.", "source_refs": [ "SRC-032", "SRC-033", "SRC-039", "SRC-040" ], "findings": [ { "id": "money-govctl-finding-roles-and-sod", "name": "Accountable roles and segregation of duties", "description": "Declaration of the parties associated with a monetary assertion - accountable value owner, currency-data steward, valuation authority, preparer, independent reviewer and approver - and of whether those positions are held by distinct parties. All declarations are advisory metadata; no permission is granted or withheld here.", "source_refs": [ "SRC-034", "SRC-040" ], "questions": [ { "id": "money-govctl-q-value-owner", "text": "Which party is recorded as accountable for this monetary value on its host record, and over what interval?", "kind": "ownership", "answer_data": [ "accountable party reference", "accountability basis code", "assignment effective interval" ] }, { "id": "money-govctl-q-steward-and-valuer", "text": "Which function stewards the currency code list and rounding configuration, and which body is named as the valuation authority for the basis applied?", "kind": "authority", "answer_data": [ "currency-data steward reference", "valuation authority reference", "authority basis note" ] }, { "id": "money-govctl-q-sod-distinctness", "text": "Are preparer, independent reviewer and approver held by distinct parties for this assertion?", "kind": "process", "answer_data": [ "preparer reference", "reviewer reference", "approver reference", "distinctness result" ] }, { "id": "money-govctl-q-sod-relief", "text": "Under which declared rule may one party hold more than one of these positions, and what compensating declaration is then recorded?", "kind": "exception", "answer_data": [ "relief rule reference", "combined positions list", "compensating declaration text", "relief expiry" ] }, { "id": "money-govctl-q-role-evidence", "text": "What evidence supports each declared role assignment where the reviewer relied on an automated check rather than re-performance?", "kind": "evidence", "answer_data": [ "evidence item reference", "evidence kind code", "re-performance indicator" ] } ], "data_elements": [ { "id": "money-govctl-de-accountable-party-ref", "name": "Accountable party reference", "description": "Reference to the party recorded as accountable for the monetary value on its host; optional, because no source requires a single owner for every monetary value.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-040" ] }, { "id": "money-govctl-de-role-assignment", "name": "Role assignment entry", "description": "An advisory association of a party with one role (steward, valuation authority, preparer, reviewer, approver) over an effective interval, shaped for PROV attribution and delegation.", "value_kind": "object", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-034", "SRC-040" ] }, { "id": "money-govctl-de-sod-relief-declaration", "name": "Segregation relief declaration", "description": "Recorded rule reference, combined positions and compensating measure where duties cannot be segregated, as anticipated for smaller or less complex entities.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-040" ] }, { "id": "money-govctl-de-review-state", "name": "Review and approval state", "description": "Observable state code for the review and approval position of the assertion, so that approval is never inferred from the mere presence of a value.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-040" ] } ], "artifacts": [], "inline_only_rationale": "Role and segregation declarations are structured reference data pointing at party records held elsewhere; they carry no rendered content of their own and produce no document. Materialising them as artifacts would duplicate the party register and imply that this model holds the authoritative personnel record, which it does not." }, { "id": "money-govctl-finding-change-authority", "name": "Authority for amount correction, currency and rate-source selection, and rounding policy", "description": "Declaration of the authority under which an existing amount or currency may be corrected, under which a rate source is chosen, and under which the rounding and minor-unit policy applied to the value may be changed - including whether that authority is jurisdictional or entity-internal.", "source_refs": [ "SRC-001", "SRC-032", "SRC-039", "SRC-023", "SRC-040" ], "questions": [ { "id": "money-govctl-q-correction-authority", "text": "Which authority record permits a correction to the amount or currency of an existing monetary assertion?", "kind": "authority", "answer_data": [ "authority record reference", "permitted change kinds", "authority scope code" ] }, { "id": "money-govctl-q-rate-source-basis", "text": "On what basis was the exchange-rate source selected, and is the selection mandated by a jurisdictional rule or chosen under entity policy?", "kind": "decision", "answer_data": [ "rate source reference", "selection basis code", "mandating rule reference", "notification requirement flag" ] }, { "id": "money-govctl-q-rounding-competence", "text": "Which rounding and minor-unit policy version applies, and who is competent to change it?", "kind": "constraint", "answer_data": [ "rounding policy reference", "policy version", "competent party reference" ] }, { "id": "money-govctl-q-rate-unavailable", "text": "What is recorded when the mandated rate source publishes nothing for the required instant or the currency is not exchangeable at the measurement date?", "kind": "exception", "answer_data": [ "fallback rule reference", "substitute rate source", "estimation basis note", "deviation flag" ] } ], "data_elements": [ { "id": "money-govctl-de-change-authority-ref", "name": "Change authority reference", "description": "Reference to the authority record (delegation, policy or statutory rule) relied on for a correction or re-basing of the value.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-040" ] }, { "id": "money-govctl-de-rate-source-selection-basis", "name": "Rate-source selection basis", "description": "Code distinguishing a statutorily mandated source, a framework-required spot or closing rate, and an entity-policy choice.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-032", "SRC-039" ] }, { "id": "money-govctl-de-rounding-policy-ref", "name": "Rounding policy reference", "description": "Reference plus version of the rounding and minor-unit policy applied; the ISO 4217 minor unit is an input to that policy, not the policy itself.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001" ] }, { "id": "money-govctl-de-fallback-declaration", "name": "Rate fallback declaration", "description": "Record of the substitute source, estimation basis or deviation applied when the mandated source or an exchange rate was unavailable.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-032", "SRC-023" ] } ], "artifacts": [ { "id": "money-govctl-art-authority-declaration", "name": "Monetary change-authority declaration", "description": "A dated statement naming the authority relied on for amount correction, rate-source selection and rounding-policy change, with its scope and expiry. It records authority; it does not evaluate or enforce it.", "media_or_form": [ "structured record", "human-readable statement" ], "serial": false, "identity_strategy": "Authoritative identifier of the issuing governance system's policy or delegation record; otherwise a Dimension-assigned ULID.", "source_refs": [ "SRC-039", "SRC-040" ] } ], "inline_only_rationale": null } ] }, { "id": "money-govctl-layer-assertion-lifecycle", "name": "Assertion identity, versioning and normative pins", "description": "How a monetary assertion is identified through its host, how its versions and effective intervals are managed, and which external code-list and policy versions were in force when it was made.", "source_refs": [ "SRC-001", "SRC-017", "SRC-027", "SRC-038" ], "findings": [ { "id": "money-govctl-finding-weak-identity", "name": "Host-dependent weak identity of a monetary assertion", "description": "A monetary value has no independent existence: it is identified by its host record, the role it plays on that host, its currency and its valuation context, mirroring how a reported monetary fact is identified by concept, context and unit. A valuation date is context, never an identifier.", "source_refs": [ "SRC-017", "SRC-027" ], "questions": [ { "id": "money-govctl-q-identity-key", "text": "Which combination of host reference, role on the host, currency and valuation context uniquely identifies this monetary assertion?", "kind": "identity", "answer_data": [ "host record reference", "host role code", "currency code", "valuation context key" ] }, { "id": "money-govctl-q-surrogate-condition", "text": "Under which conditions must the adopting Dimension mint a surrogate identifier instead of relying on the host key?", "kind": "requirement", "answer_data": [ "surrogate trigger condition", "surrogate identifier", "identifier scheme" ] }, { "id": "money-govctl-q-lookalike-discrimination", "text": "How is this assertion distinguished from another that merely carries the same amount and the same currency?", "kind": "validation", "answer_data": [ "discriminating attribute list", "collision test result" ] }, { "id": "money-govctl-q-addressability", "text": "Is the monetary assertion an inseparable component of the host record or a separately addressable record?", "kind": "composition", "answer_data": [ "addressability code", "containment relation", "host cardinality" ] } ], "data_elements": [ { "id": "money-govctl-de-host-ref", "name": "Host record reference", "description": "Reference to the record the monetary value is attached to; mandatory because the mixin has no standalone existence.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-017" ] }, { "id": "money-govctl-de-host-role-code", "name": "Role on host", "description": "Code for the position the value occupies on its host (for example gross amount, tax amount, translated amount), which discriminates same-valued siblings.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-017" ] }, { "id": "money-govctl-de-identity-component-set", "name": "Identity component set", "description": "Ordered list naming the attributes that jointly identify the assertion (host reference, role, currency, valuation context), used for collision checks.", "value_kind": "collection", "cardinality": "1", "required": true, "source_refs": [ "SRC-017" ] }, { "id": "money-govctl-de-surrogate-id", "name": "Dimension-assigned surrogate identifier", "description": "UUID or ULID minted only when the host key is unavailable or unstable; never derived from a date.", "value_kind": "identifier", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-027" ] } ], "artifacts": [], "inline_only_rationale": "Identity here is a key definition and a set of pointer fields evaluated at read time. Emitting an artifact would create a second, competing identity anchor for something that is deliberately dependent on its host, and would invite systems to treat the monetary value as an independent master record." }, { "id": "money-govctl-finding-version-supersession", "name": "Version, effective interval, correction and supersession", "description": "Lifecycle verbs govern the monetary binding on its host - asserted, revised, superseded, withdrawn - and never the currency, the rate feed, the transaction, the account or the instrument. Where preservation rules forbid rewriting, correction is expressed as an additive superseding version.", "source_refs": [ "SRC-034", "SRC-027", "SRC-038" ], "questions": [ { "id": "money-govctl-q-lifecycle-states", "text": "Which lifecycle states may a monetary assertion occupy on its host, and which transitions between them are permitted?", "kind": "lifecycle", "answer_data": [ "state code list", "permitted transition list", "transition precondition" ] }, { "id": "money-govctl-q-time-separation", "text": "How are the interval over which the asserted value is effective and the instant at which it was recorded represented separately?", "kind": "temporal", "answer_data": [ "effective interval start and end", "recorded-at timestamp", "time base note" ] }, { "id": "money-govctl-q-correction-mode", "text": "When a corrected amount is issued, is the prior assertion overwritten or retained as an immutable superseded version?", "kind": "state", "answer_data": [ "correction mode code", "superseded version reference", "immutability basis reference" ] }, { "id": "money-govctl-q-external-trigger", "text": "Which external record must be cited when the change is driven by an event this model does not own, such as a restatement or a re-issued source document?", "kind": "event", "answer_data": [ "external trigger reference", "trigger type code", "trigger observation time" ] } ], "data_elements": [ { "id": "money-govctl-de-assertion-status", "name": "Assertion status", "description": "State of the monetary binding on its host (for example asserted, superseded, withdrawn); scoped to the binding, not to any external object.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-038" ] }, { "id": "money-govctl-de-effective-interval", "name": "Effective interval", "description": "Start and optional end of the interval over which the asserted value holds, expressed with explicit offsets.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-027" ] }, { "id": "money-govctl-de-recorded-at", "name": "Recorded-at timestamp", "description": "Instant at which the assertion was recorded in the holding system, kept distinct from the valuation instant and from the rate observation time.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-027" ] }, { "id": "money-govctl-de-supersedes-ref", "name": "Superseded assertion reference", "description": "Reference from a corrected assertion to the version it replaces, aligned with a provenance revision relation.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-034" ] }, { "id": "money-govctl-de-external-trigger-ref", "name": "External change trigger reference", "description": "Pointer to the externally owned record that occasioned the change; this model records the pointer, not the external record's own lifecycle.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-038" ] } ], "artifacts": [ { "id": "money-govctl-art-revision-note", "name": "Monetary assertion revision note", "description": "A per-revision note recording what changed, the authority cited, the trigger and the superseded version, retained additively so that no prior value is erased.", "media_or_form": [ "structured record", "human-readable note" ], "serial": true, "identity_strategy": "Host key plus role plus zero-padded monotonic revision sequence; the sequence number never encodes a date.", "source_refs": [ "SRC-034", "SRC-038" ] } ], "inline_only_rationale": null }, { "id": "money-govctl-finding-reference-pins", "name": "Currency-list and policy version pins", "description": "Record of which ISO 4217 code-list edition and amendment, and which rounding, rate-source and accounting-profile policy versions, were in force when the assertion was made - so the value stays interpretable after those references change. The register's own lifecycle stays with its maintenance agency.", "source_refs": [ "SRC-001", "SRC-039" ], "questions": [ { "id": "money-govctl-q-list-pin", "text": "Which ISO 4217 code-list edition and amendment number were in force when this currency code was resolved?", "kind": "provenance", "answer_data": [ "code-list edition", "amendment number", "list identifier (current, fund, historic)", "resolution time" ] }, { "id": "money-govctl-q-historic-code", "text": "How does a value citing a withdrawn or replaced currency code remain interpretable after the register publishes the replacement?", "kind": "interoperability", "answer_data": [ "code status code", "replacement code", "replacement effective date", "historic list reference" ] }, { "id": "money-govctl-q-policy-pins", "text": "Which policy versions - rounding, rate-source rule and accounting profile - are pinned to this assertion?", "kind": "constraint", "answer_data": [ "policy reference", "policy version label", "pin time" ] }, { "id": "money-govctl-q-unversioned-pin", "text": "How is a pin recorded when the referenced register or policy publishes no version identifier?", "kind": "exception", "answer_data": [ "retrieval timestamp", "content digest", "pin confidence note" ] } ], "data_elements": [ { "id": "money-govctl-de-currency-list-pin", "name": "Currency code-list pin", "description": "Edition, amendment number and list identifier of the ISO 4217 code list used to resolve the currency, with the resolution time.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001" ] }, { "id": "money-govctl-de-code-status", "name": "Currency code status", "description": "Whether the cited code is current, a fund code or a historic code under the maintenance agency's published lists.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001" ] }, { "id": "money-govctl-de-policy-version-pin", "name": "Policy version pin", "description": "Reference and version label of each governing policy in force at assertion time, plus a content digest when the source is unversioned.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-039" ] } ], "artifacts": [], "inline_only_rationale": "Pins are short structured references whose authoritative content lives in externally published lists and policy registers. Copying those lists into local artifacts would fork a normative register that the maintenance agency alone may amend, and would create stale duplicates of material this model must only cite." } ] } ] }, { "id": "money-govctl-bundle-stewardship-interop", "name": "Provenance, protection, retention and interoperability of monetary context", "description": "How an original or derived monetary value is attributed and evidenced, how its confidentiality and access scopes are declared, how long the context is kept and what survives disposition, and how it is mapped to external representations under regional and accounting profiles.", "rationale": "Derivation, attribution and delegation relations are standardised (SRC-034); rate publishers attach explicit usage limitations that must travel with the value (SRC-023); preservation format and accessibility duties apply to financial records (SRC-038) within a lifecycle whose disposal step belongs to the records programme (SRC-037); and access decisions are made by an external decision point from published attributes (SRC-035, SRC-036).", "source_refs": [ "SRC-034", "SRC-035", "SRC-036", "SRC-037", "SRC-038", "SRC-023" ], "layers": [ { "id": "money-govctl-layer-provenance-evidence", "name": "Value provenance and evidence integrity", "description": "Lineage from original to derived monetary values, attribution of responsibility, and the integrity and limitations of the evidence that supports them.", "source_refs": [ "SRC-032", "SRC-034", "SRC-023", "SRC-040" ], "findings": [ { "id": "money-govctl-finding-value-provenance", "name": "Provenance of original and derived monetary values", "description": "Lineage of a monetary value: which original amount it came from, which conversion, translation, re-measurement or allocation produced it, which rate was applied and for which instant, and which agent is responsible - shaped to entity/activity/agent provenance relations.", "source_refs": [ "SRC-032", "SRC-033", "SRC-034", "SRC-027", "SRC-023" ], "questions": [ { "id": "money-govctl-q-derivation-chain", "text": "From which original value, by which activity and with which applied rate was this derived monetary value produced?", "kind": "provenance", "answer_data": [ "original value reference", "derivation activity type", "applied rate value", "rate source reference" ] }, { "id": "money-govctl-q-attribution", "text": "Which agent is attributed responsibility for the derived value, and on whose behalf did that agent act?", "kind": "relationship", "answer_data": [ "attributed agent reference", "delegating agent reference", "attribution relation type" ] }, { "id": "money-govctl-q-rate-instant", "text": "Which instant does the applied rate refer to, and when was it retrieved from its publisher?", "kind": "temporal", "answer_data": [ "rate reference instant", "rate retrieval timestamp", "publication cut-off note" ] }, { "id": "money-govctl-q-measurement-basis", "text": "Is the recorded value an as-transacted amount, a translated amount or a re-measured amount?", "kind": "measurement", "answer_data": [ "measurement basis code", "basis mandating profile", "input observability note" ] }, { "id": "money-govctl-q-recompute-tolerance", "text": "What tolerance is accepted between a value recomputed from the lineage and the stored value?", "kind": "quality", "answer_data": [ "tolerance expression", "recomputation result", "tolerance breach flag" ] } ], "data_elements": [ { "id": "money-govctl-de-original-value-ref", "name": "Original value reference", "description": "Reference to the as-stated monetary value from which this value was derived; absent when the value is itself original.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-034" ] }, { "id": "money-govctl-de-derivation-activity", "name": "Derivation activity", "description": "Type, parameters and time of the activity that produced the derived value (conversion, translation, re-measurement, allocation).", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-034" ] }, { "id": "money-govctl-de-rate-source-ref", "name": "Applied rate source reference", "description": "Reference to the publisher and series of the rate applied, together with any publisher-stated usage limitation.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-023" ] }, { "id": "money-govctl-de-rate-reference-instant", "name": "Rate reference instant", "description": "The instant the applied rate refers to, distinct from the instant the rate was retrieved and from the recorded-at time.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-027", "SRC-023" ] }, { "id": "money-govctl-de-measurement-basis", "name": "Measurement basis", "description": "Code stating whether the amount is as transacted, translated at a spot or closing rate, or re-measured on another basis.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-032", "SRC-033" ] }, { "id": "money-govctl-de-attributed-agent-ref", "name": "Attributed agent reference", "description": "Agent responsible for producing the value, with optional delegation to the agent it acted on behalf of.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-034" ] } ], "artifacts": [ { "id": "money-govctl-art-conversion-lineage-record", "name": "Conversion lineage record", "description": "A record binding the original value, derivation activity, applied rate, rate instant and attributed agent so that a derived value can be independently recomputed and challenged.", "media_or_form": [ "structured record", "provenance graph fragment" ], "serial": false, "identity_strategy": "Derived assertion key plus derivation activity identifier; falls back to a Dimension-assigned ULID where the activity is unidentified.", "source_refs": [ "SRC-034" ] } ], "inline_only_rationale": null }, { "id": "money-govctl-finding-evidence-integrity", "name": "Evidence integrity, audit references and stated limitations", "description": "Integrity declarations for the evidence supporting a monetary value (rate snapshots, source documents, approval records), references to external audit or assurance records, and explicit limitations - including that a rate published for information only cannot be presented as a transaction rate. This model holds neither the audit trail nor the audit conclusion.", "source_refs": [ "SRC-038", "SRC-023", "SRC-040" ], "questions": [ { "id": "money-govctl-q-evidence-digest", "text": "Which integrity check value and algorithm are recorded for each evidence item supporting this value?", "kind": "evidence", "answer_data": [ "evidence item reference", "digest value", "digest algorithm code", "digest computation time" ] }, { "id": "money-govctl-q-evidence-completeness", "text": "How is the completeness of the evidence set for a monetary assertion checked declaratively?", "kind": "validation", "answer_data": [ "required evidence kind list", "present evidence kind list", "completeness result" ] }, { "id": "money-govctl-q-source-limitation", "text": "Which limitation must be stated when the supporting rate is published for information purposes only?", "kind": "constraint", "answer_data": [ "limitation note text", "publisher statement reference", "permitted use scope" ] }, { "id": "money-govctl-q-evidence-defect", "text": "What is recorded when evidence is missing, superseded, or supplied by a party with an interest in the value?", "kind": "exception", "answer_data": [ "defect type code", "interested-party flag", "mitigating evidence reference" ] }, { "id": "money-govctl-q-audit-reference", "text": "Which external audit or assurance record is cited, and what does this model deliberately not assert about it?", "kind": "relationship", "answer_data": [ "audit record reference", "citation scope note", "non-assertion statement" ] } ], "data_elements": [ { "id": "money-govctl-de-evidence-item", "name": "Evidence item entry", "description": "Reference, kind and origin of one item of supporting evidence for the monetary assertion.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-040" ] }, { "id": "money-govctl-de-integrity-digest", "name": "Evidence integrity digest", "description": "Digest value and algorithm recorded for an evidence item, supporting later detection of modification without asserting that any control operated.", "value_kind": "text", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-038" ] }, { "id": "money-govctl-de-audit-record-ref", "name": "External audit record reference", "description": "Pointer to an audit or assurance record concerning the value or its controls; the reference conveys existence and scope only.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-040" ] }, { "id": "money-govctl-de-evidence-limitation-note", "name": "Evidence limitation note", "description": "Statement of the declared limits of an evidence item, such as a publisher's information-only qualification on a reference rate.", "value_kind": "text", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-023" ] } ], "artifacts": [ { "id": "money-govctl-art-rate-evidence-snapshot", "name": "Rate evidence snapshot", "description": "A captured copy of the rate quotation relied on, with publisher, series, reference instant, retrieval time and any usage limitation as published.", "media_or_form": [ "structured record", "captured source extract" ], "serial": true, "identity_strategy": "Rate source identifier plus series plus rate reference instant, with a zero-padded capture sequence for repeated captures of the same instant.", "source_refs": [ "SRC-023" ] }, { "id": "money-govctl-art-integrity-manifest", "name": "Evidence integrity manifest", "description": "A manifest listing each evidence item with its digest, algorithm and computation time, enabling recomputation and comparison without altering the evidence.", "media_or_form": [ "structured record" ], "serial": false, "identity_strategy": "Assertion key plus manifest revision reference; no date component is used as the identifier.", "source_refs": [ "SRC-038" ] } ], "inline_only_rationale": null } ] }, { "id": "money-govctl-layer-protection-access", "name": "Sensitivity classification and access scoping", "description": "Confidentiality classification of monetary values and the attributes and scopes this model publishes so that an external decision point can evaluate a request.", "source_refs": [ "SRC-035", "SRC-036" ], "findings": [ { "id": "money-govctl-finding-sensitivity-access", "name": "Sensitive or commercially restricted values and access scopes", "description": "Classification of monetary values that are commercially restricted or otherwise sensitive, the handling labels that must travel with them, and the declaration of access constraints at bundle, layer, finding and artifact scope. The model contributes attributes only; decision and enforcement remain with the external authorization component.", "source_refs": [ "SRC-035", "SRC-036", "SRC-038" ], "questions": [ { "id": "money-govctl-q-sensitivity-class", "text": "Which sensitivity class applies, and does it attach to the amount, the currency, the counterparty or the derivation?", "kind": "classification", "answer_data": [ "sensitivity class code", "attachment target code", "classification basis reference" ] }, { "id": "money-govctl-q-commercial-restriction", "text": "Which values are commercially restricted such that disclosure would breach a contractual confidentiality term?", "kind": "privacy", "answer_data": [ "restriction basis code", "restricting agreement reference", "restricted recipient class" ] }, { "id": "money-govctl-q-published-attributes", "text": "Which resource and environment attributes must this model expose so that an external decision point can evaluate a request?", "kind": "access", "answer_data": [ "attribute name list", "attribute value type", "scope code (bundle, layer, finding, artifact)" ] }, { "id": "money-govctl-q-projection-constraint", "text": "How is a required masked, banded or rounded projection of a restricted amount declared without asserting that masking has been applied?", "kind": "security", "answer_data": [ "projection constraint expression", "target scope", "applied-by system reference" ] }, { "id": "money-govctl-q-access-exception", "text": "Which time-bounded exceptions permit broader access, for example to a regulator or an external auditor?", "kind": "exception", "answer_data": [ "exception basis reference", "beneficiary class", "exception interval" ] } ], "data_elements": [ { "id": "money-govctl-de-sensitivity-class", "name": "Sensitivity class", "description": "Classification code for the monetary value, used as an object attribute by an external decision point.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-036" ] }, { "id": "money-govctl-de-restriction-basis", "name": "Commercial restriction basis", "description": "Code and agreement reference explaining why the value is commercially restricted.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-036" ] }, { "id": "money-govctl-de-access-scope", "name": "Declared access scope", "description": "The scope at which an access constraint is declared: bundle, layer, finding or artifact.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-035" ] }, { "id": "money-govctl-de-handling-label", "name": "Handling label", "description": "Label that must accompany the value when projected into another system, carried as advisory metadata.", "value_kind": "text", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-036" ] }, { "id": "money-govctl-de-access-exception-declaration", "name": "Access exception declaration", "description": "Time-bounded declaration of a broader-access basis, such as regulatory examination access to preserved records.", "value_kind": "object", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-035", "SRC-038" ] } ], "artifacts": [], "inline_only_rationale": "These are attribute declarations consumed at request time by an external policy decision point; they have no standalone rendered form. Producing an artifact would encourage the model to be treated as a policy store or as the record of an access decision, which would take ownership of evaluation and enforcement that belong to the authorization component." } ] }, { "id": "money-govctl-layer-retention-interoperability", "name": "Retention, disposition and profile interoperability", "description": "How long monetary context and its evidence are kept, what survives disposition, and how the value is declared against regional and accounting profiles and mapped to external representations.", "source_refs": [ "SRC-001", "SRC-017", "SRC-037", "SRC-038", "SRC-039" ], "findings": [ { "id": "money-govctl-finding-retention-hold", "name": "Retention class, legal hold and tombstone", "description": "Declaration of the retention class and trigger for this model's own monetary context records and evidence, the presence and source of a legal hold that suppresses disposition, and the tombstone content retained after disposal. Disposal execution, transfer and destruction evidence belong to the records programme.", "source_refs": [ "SRC-037", "SRC-038" ], "questions": [ { "id": "money-govctl-q-retention-class", "text": "Which retention class, trigger event and minimum period apply to this monetary context record and its evidence?", "kind": "retention", "answer_data": [ "retention class code", "retention trigger event", "minimum retention period", "accessibility requirement note" ] }, { "id": "money-govctl-q-hold-authority", "text": "How is a legal hold recorded so that disposition is suppressed, and which external authority issued it?", "kind": "authority", "answer_data": [ "hold flag", "issuing authority reference", "hold scope", "hold start and release times" ] }, { "id": "money-govctl-q-tombstone-content", "text": "Which end-of-life states may the record occupy, and which fields survive in a tombstone after disposal?", "kind": "lifecycle", "answer_data": [ "end-of-life state code", "retained tombstone field list", "irreversibly removed field list" ] }, { "id": "money-govctl-q-disposal-execution", "text": "Which system executes disposal, and what does this model record as evidence that disposition occurred?", "kind": "process", "answer_data": [ "executing system reference", "disposition record reference", "disposition completion timestamp" ] }, { "id": "money-govctl-q-period-conflict", "text": "How are retention obligations reconciled when the host record and the monetary assertion carry different periods?", "kind": "constraint", "answer_data": [ "longest-period rule reference", "host period", "assertion period", "reconciled disposition-eligible time" ] } ], "data_elements": [ { "id": "money-govctl-de-retention-class", "name": "Retention class", "description": "Classification assigning the monetary context record to a retention schedule owned by the records programme.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-037" ] }, { "id": "money-govctl-de-retention-trigger-event", "name": "Retention trigger event", "description": "The event that starts the retention clock, such as record creation or closure of the host transaction.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-037", "SRC-038" ] }, { "id": "money-govctl-de-hold-flag", "name": "Legal hold flag", "description": "Boolean declaring that disposition is suppressed; the decision to impose or release the hold is made outside this model.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-037" ] }, { "id": "money-govctl-de-hold-authority-ref", "name": "Hold authority reference", "description": "Reference to the instruction or authority under which the hold was imposed.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-037" ] }, { "id": "money-govctl-de-tombstone", "name": "Tombstone content", "description": "The minimal surviving record after disposal: assertion key, host reference, currency code, retention class, disposition time and disposition record reference, with amount and evidence removed.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-037", "SRC-038" ] }, { "id": "money-govctl-de-disposition-record-ref", "name": "Disposition record reference", "description": "Pointer to the externally held record evidencing that disposal was carried out.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-037" ] } ], "artifacts": [ { "id": "money-govctl-art-tombstone-record", "name": "Monetary context tombstone record", "description": "The surviving stub for a disposed monetary context record, preserving identity and disposition facts while carrying no amount or evidence content.", "media_or_form": [ "structured record" ], "serial": false, "identity_strategy": "The assertion key of the disposed record, preserved unchanged so that inbound references resolve to a tombstone rather than dangling.", "source_refs": [ "SRC-037", "SRC-038" ] } ], "inline_only_rationale": null }, { "id": "money-govctl-finding-profile-conformance", "name": "Regional and accounting profile declaration and interoperability mappings", "description": "Declaration of the regional, tax or accounting profile that governs a value - including functional and presentation currency roles and statutory conversion rules - and of the mappings to external representations, each labelled as an alignment or an evidenced conformance claim, with declared losses.", "source_refs": [ "SRC-001", "SRC-032", "SRC-017", "SRC-039" ], "questions": [ { "id": "money-govctl-q-profile-declaration", "text": "Which regional, tax or accounting profile governs this value, and which currency roles does it assign?", "kind": "classification", "answer_data": [ "profile reference", "profile version", "functional currency role", "presentation currency role" ] }, { "id": "money-govctl-q-mapping-kind", "text": "To which external representations is this monetary context mapped, and is each mapping an alignment or a claim of conformance?", "kind": "interoperability", "answer_data": [ "target representation reference", "mapping kind code", "mapped field pairs" ] }, { "id": "money-govctl-q-mapping-loss", "text": "Where the external representation cannot express a local field, what loss is declared and what round-trip behaviour is expected?", "kind": "quality", "answer_data": [ "unmapped field list", "loss description", "round-trip expectation code" ] }, { "id": "money-govctl-q-profile-precedence", "text": "Which rule takes precedence when two profiles mandate different rate sources for the same underlying value?", "kind": "decision", "answer_data": [ "precedence rule reference", "competing profile references", "selected profile", "dual-value indicator" ] }, { "id": "money-govctl-q-conformance-evidence", "text": "Which checks must pass before a conformance claim, rather than an alignment, may be recorded?", "kind": "validation", "answer_data": [ "required check list", "check outcome", "claim status code" ] } ], "data_elements": [ { "id": "money-govctl-de-profile-ref", "name": "Governing profile reference", "description": "Reference and version of the regional, tax or accounting profile governing the value's currency roles and conversion rule.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-032", "SRC-039" ] }, { "id": "money-govctl-de-mapping-entry", "name": "Interoperability mapping entry", "description": "Pairing of a local field with a field in an external representation, labelled as alignment or conformance.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-017" ] }, { "id": "money-govctl-de-known-loss-note", "name": "Declared mapping loss", "description": "Statement of information that cannot survive a mapping, such as pins or limitation notes with no target field.", "value_kind": "text", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-017" ] }, { "id": "money-govctl-de-precedence-rule-ref", "name": "Profile precedence rule reference", "description": "Reference to the rule resolving competing profile mandates, or an indicator that two mandated values must coexist.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-032", "SRC-039" ] } ], "artifacts": [ { "id": "money-govctl-art-profile-conformance-statement", "name": "Profile conformance statement", "description": "A statement naming the profile, its version, the checks performed and whether the result is an alignment or an evidenced conformance claim.", "media_or_form": [ "structured record", "human-readable statement" ], "serial": false, "identity_strategy": "Profile reference plus profile version plus the identifier of the model release the statement was made against.", "source_refs": [ "SRC-032", "SRC-039" ] }, { "id": "money-govctl-art-mapping-table", "name": "External representation mapping table", "description": "A field-level mapping table between this model's monetary context and an external representation, including unmapped fields and declared losses.", "media_or_form": [ "structured record", "tabular document" ], "serial": false, "identity_strategy": "Target representation identifier plus target version; a Dimension-assigned ULID is used when the target publishes no version.", "source_refs": [ "SRC-001", "SRC-017" ] } ], "inline_only_rationale": null } ] } ] }, { "id": "money-svcstate-operations", "name": "Monetary assertion operation semantics", "description": "The complete state-reading and state-changing operation surface of a monetary assertion bound to a host record: deterministic as-of resolution, binding and creation preconditions, correction by supersession, review and approval evidence, and disposition readiness. Every operation is declarative and produces a resolution, a check result, a plan, an evidence compilation or a readiness verdict.", "rationale": "A monetary assertion is only meaningful relative to a host, an effective time and a declared precision, so its operation contract cannot be inferred from the payload alone. Precision must survive round-trips (SRC-044), the currency reference must be resolved against the register list that applied at the effective instant (SRC-001), effective and observation time must be distinguished (SRC-027, SRC-017, SRC-048), concurrent change must be mediated by validators and preconditions (SRC-041, SRC-043), correction must be expressed as derivation and invalidation rather than mutation (SRC-034, SRC-045), and removal readiness must be reported separately from disposition execution (SRC-037, SRC-042). Authorization stays advisory because the decision belongs to a policy decision point (SRC-035, SRC-036), and every outcome — including failure — must be machine-identifiable (SRC-047).", "source_refs": [ "SRC-001", "SRC-034", "SRC-041", "SRC-027", "SRC-037", "SRC-042", "SRC-035", "SRC-043", "SRC-044", "SRC-047", "SRC-048" ], "layers": [ { "id": "money-svcstate-read-plane", "name": "Read plane: effective-time resolution", "description": "How a request selects exactly one version of a bound monetary assertion for a stated effective instant and observation cut-off, what it returns verbatim, and how it reports a non-result, a broken binding or a tombstone. Reads are safe: they change no state.", "source_refs": [ "SRC-041", "SRC-027", "SRC-043", "SRC-044", "SRC-017", "SRC-048", "SRC-011" ], "findings": [ { "id": "money-svcstate-effective-read", "name": "Deterministic as-of read of a bound monetary assertion", "description": "The rules that make a read reproducible: which two instants the caller supplies, which single version those instants select, what must be returned unchanged, and how an unresolvable, absent or retired result is reported. A monetary amount carries an explicit validity interval rather than an implied always-current value, so a read without an as-of pair is under-specified.", "source_refs": [ "SRC-041", "SRC-027", "SRC-043", "SRC-044", "SRC-017", "SRC-047", "SRC-048", "SRC-011" ], "questions": [ { "id": "money-svcstate-q-asof-inputs", "text": "Which effective instant and which observation cut-off instant does a read supply, and what is the declared default when either is omitted?", "kind": "temporal", "answer_data": [ "Requested effective (valuation) instant as an RFC 3339 value with seconds and an explicit offset or Z", "Requested observation/ingestion cut-off instant in the same form", "Declared defaults, for example effective = request instant and observation = latest recorded", "Statement of whether a caller-supplied offset is preserved or normalised, and which form is used for comparison" ] }, { "id": "money-svcstate-q-version-selection", "text": "Which single assertion version is selected when more than one effective interval covers the requested instant, and how is a tie broken?", "kind": "state", "answer_data": [ "Ordered list of candidate versions with their effective intervals", "Interval boundary convention (inclusive start, exclusive end) and the containment test applied", "Deterministic tie-break key, for example latest observation instant then highest version counter", "Explicit none-applicable outcome marker used instead of returning the nearest version" ] }, { "id": "money-svcstate-q-read-nonderivation", "text": "Which stored values must a read return verbatim, and which derivations are forbidden in the read path?", "kind": "constraint", "answer_data": [ "Amount returned as the stored canonical decimal string including trailing zeros, with the declared scale", "Currency code returned as stored, plus the register list and status that applied at the effective instant", "Prohibition on conversion, re-scaling, rounding or unit substitution during a read", "Flag raised when the stored currency code is historic or withdrawn at the effective instant" ] }, { "id": "money-svcstate-q-read-failure", "text": "How does a read report an unresolvable host binding, a tombstoned assertion, or an as-of request outside the supported range?", "kind": "exception", "answer_data": [ "Structured failure descriptor with a resolvable type URI, title, status, detail and instance", "Distinct codes for unknown identifier, unresolvable binding, tombstoned assertion and unsupported as-of window", "Gone-style outcome for a tombstoned assertion, kept distinct from unknown-identifier", "Reference to the advisory eligibility report when a value is withheld rather than absent" ] } ], "data_elements": [ { "id": "money-svcstate-de-effective-instant", "name": "Requested effective instant", "description": "The valuation instant for which the caller wants the monetary assertion resolved.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-027", "SRC-017", "SRC-048" ] }, { "id": "money-svcstate-de-observation-instant", "name": "Requested observation cut-off instant", "description": "The recording-time cut-off; versions recorded after this instant are excluded, allowing a past view of what was known at a given time.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-034", "SRC-027" ] }, { "id": "money-svcstate-de-selection-trace", "name": "Version selection trace", "description": "Ordered record of candidate versions considered, the containment test result for each, and the tie-break key applied, sufficient to reproduce the selection.", "value_kind": "collection", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-048", "SRC-043" ] }, { "id": "money-svcstate-de-resolution-outcome", "name": "Resolution outcome code", "description": "Coded result of the read: resolved, none-applicable, unresolvable-binding, tombstoned or withheld.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-043", "SRC-047" ] }, { "id": "money-svcstate-de-register-status", "name": "Currency register status at effective instant", "description": "Which maintenance-agency list the referenced code belonged to at the effective instant: current currency, fund code or historic/withdrawn.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-044" ] } ], "artifacts": [], "inline_only_rationale": "An as-of read is a deterministic projection computed over assertion versions the host already persists; it creates no new governed content. Emitting a stored artifact for every read would produce a second, divergent copy of a host-owned record and would imply ownership of persistence and of audit-trail production, both of which belong to the host and to the audit component respectively. The read therefore exists only as inline request parameters plus reference values — the selected version identifier, its validator, and the outcome code — with no artifact of its own." } ] }, { "id": "money-svcstate-change-plane", "name": "Change plane: binding, creation and correction", "description": "How a monetary assertion is attached to a resolvable host anchor and created under explicit preconditions and idempotency, and how an erroneous or overtaken assertion is corrected by issuing a superseding version while the original stays immutable.", "source_refs": [ "SRC-001", "SRC-034", "SRC-041", "SRC-043", "SRC-044", "SRC-045", "SRC-046", "SRC-047", "SRC-048" ], "findings": [ { "id": "money-svcstate-host-bind", "name": "Create and bind a monetary assertion to a resolvable host anchor", "description": "The anchor that ties an assertion to one host record and attribute path, the preconditions that must hold before a create is accepted, the mechanism that distinguishes a retried request from a second assertion, and the references whose continued resolvability keeps the binding valid.", "source_refs": [ "SRC-001", "SRC-041", "SRC-043", "SRC-044", "SRC-046", "SRC-047" ], "questions": [ { "id": "money-svcstate-q-host-anchor", "text": "Which resolvable identifier and attribute path anchor the assertion to its host, and how is that anchor demonstrated to resolve?", "kind": "identity", "answer_data": [ "Host master-system identifier and the host model or type it belongs to", "Attribute path or role name the assertion occupies within the host", "Resolver reference, resolution outcome and the observation instant of the resolution attempt", "Cardinality rule stating whether the path admits one assertion or a series" ] }, { "id": "money-svcstate-q-create-preconditions", "text": "Which preconditions must hold before a create is accepted, and which of them are hard failures rather than warnings?", "kind": "requirement", "answer_data": [ "Currency code present in the applicable maintenance-agency list at the effective instant", "Declared scale consistent with the minor unit, or an explicit over-precision declaration with a stated reason", "Host anchor resolves and is neither tombstoned nor under a blocking hold", "Per-precondition severity classification and the aggregate accept/reject verdict" ] }, { "id": "money-svcstate-q-idempotency", "text": "How is a repeated create recognised as the same request rather than as a second assertion?", "kind": "process", "answer_data": [ "Client-supplied idempotency key, its uniqueness scope and its published expiry policy", "Request fingerprint computed over the canonical assertion payload", "Replay behaviour returning the first recorded outcome, success or failure alike", "Distinct outcomes for a duplicate arriving while the original is in flight and for key reuse with a different fingerprint" ] }, { "id": "money-svcstate-q-integrity-refs", "text": "Which outbound references must stay resolvable for the binding to remain valid, and what is reported when one of them breaks?", "kind": "relationship", "answer_data": [ "Host anchor reference and its last successful resolution instant", "Currency register entry reference and the list it was drawn from", "References to the authorization context, retention class and any review record", "Broken-reference report giving reference kind, failure mode, severity and whether reads remain permitted" ] } ], "data_elements": [ { "id": "money-svcstate-de-host-anchor", "name": "Host anchor reference", "description": "Resolvable reference to the host record that carries the monetary assertion, expressed as the host's authoritative identifier plus its model reference.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-043" ] }, { "id": "money-svcstate-de-attribute-path", "name": "Host attribute path", "description": "Named path or role within the host at which the assertion is bound, disambiguating multiple monetary attributes on one host.", "value_kind": "text", "cardinality": "1", "required": true, "source_refs": [ "SRC-043", "SRC-017" ] }, { "id": "money-svcstate-de-idempotency-key", "name": "Request idempotency key", "description": "Caller-supplied unique key identifying one logical create request across retries; must not be reused with a different payload.", "value_kind": "identifier", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-046" ] }, { "id": "money-svcstate-de-request-fingerprint", "name": "Canonical request fingerprint", "description": "Digest over the canonical form of the submitted assertion payload, compared alongside the idempotency key to detect payload divergence.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-046" ] }, { "id": "money-svcstate-de-precondition-outcome", "name": "Precondition outcome entry", "description": "One evaluated precondition with its identifier, verdict, severity, evidence reference and the observation instant of evaluation.", "value_kind": "collection", "cardinality": "1..n", "required": true, "source_refs": [ "SRC-041", "SRC-047" ] } ], "artifacts": [ { "id": "money-svcstate-art-precondition-report", "name": "Binding precondition and idempotency report", "description": "Declarative record of every precondition evaluated for a create/bind request: the resolved host anchor, the currency register lookup, the scale/minor-unit consistency check, the idempotency key and fingerprint state, and the aggregate readiness verdict with a structured failure descriptor where applicable. It records findings only and performs no write.", "media_or_form": [ "structured record", "human-readable check report", "reference-only pointer set" ], "serial": true, "identity_strategy": "Use the authoritative master-system report identifier issued by the host workflow system where one exists; otherwise a governed IRI minted in a namespace the adopting Dimension controls; otherwise a ULID minted by the adopting Dimension. The report carries its creation instant as content and is never identified by it.", "source_refs": [ "SRC-041", "SRC-046", "SRC-047" ] } ], "inline_only_rationale": null }, { "id": "money-svcstate-supersede-correct", "name": "Correct a monetary assertion by supersession", "description": "How a wrong or overtaken monetary assertion is replaced: a new version linked to the one it supersedes, the prior effective interval closed without gap or overlap, a current concurrency validator presented, and the original left byte-for-byte intact but marked invalid where appropriate.", "source_refs": [ "SRC-034", "SRC-041", "SRC-043", "SRC-045", "SRC-047", "SRC-048" ], "questions": [ { "id": "money-svcstate-q-supersession-link", "text": "Which links connect a correcting version to the version it supersedes, and which agent and reason are recorded with it?", "kind": "provenance", "answer_data": [ "Identifier and validator of the superseded version", "Relation type distinguishing revision of the same assertion from derivation of a new one", "Correction reason code plus free-text justification", "Responsible agent reference and the activity that generated the new version, with its generation instant" ] }, { "id": "money-svcstate-q-interval-closure", "text": "How is the effective interval of the superseded version closed, and how are gaps and overlaps across the version series detected?", "kind": "temporal", "answer_data": [ "End instant applied to the prior interval and the boundary convention used", "Overlap and gap test results across the whole series, expressed as interval relations", "Retroactive flag set when the new interval begins before the current instant, with the reason", "Rule for an open-ended final interval and how it is closed" ] }, { "id": "money-svcstate-q-concurrency", "text": "Which concurrency validator must a correction present, and what happens when the validator is stale?", "kind": "constraint", "answer_data": [ "Current version validator or version counter obtained from the last read", "Required conditional predicate that the change must carry", "Stale-validator outcome code, whether it is reported as precondition failure or conflict, and the remediation instruction", "Serialisation rule for two corrections targeting the same version" ] }, { "id": "money-svcstate-q-immutability", "text": "Which parts of a superseded version may never be rewritten, and how is an unusable version marked without erasing it?", "kind": "lifecycle", "answer_data": [ "Immutable fields of the original version: amount, currency, scale, effective interval and observation instant", "Invalidation instant and coded invalidation reason", "Status marker such as entered-in-error, withdrawn or superseded, with the marker's own observation instant", "Explicit statement that correction never mutates the original payload and never reuses its identifier" ] } ], "data_elements": [ { "id": "money-svcstate-de-supersedes-ref", "name": "Superseded version reference", "description": "Reference to the assertion version that this version replaces, together with that version's validator at the time the correction was planned.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-034", "SRC-045" ] }, { "id": "money-svcstate-de-version-validator", "name": "Version validator", "description": "Opaque strong validator or monotonic version counter identifying the exact current state of the assertion, used as the concurrency token.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-041", "SRC-043" ] }, { "id": "money-svcstate-de-effective-interval", "name": "Effective interval", "description": "Begin and end instants during which the asserted amount is held to be valid, with the boundary convention declared; the end may be open.", "value_kind": "object", "cardinality": "1", "required": true, "source_refs": [ "SRC-048", "SRC-011", "SRC-017" ] }, { "id": "money-svcstate-de-correction-reason", "name": "Correction reason code", "description": "Coded reason for the supersession, distinguishing data error, late-arriving information, restatement and re-measurement instructed elsewhere.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-034", "SRC-047" ] }, { "id": "money-svcstate-de-invalidation-instant", "name": "Invalidation instant", "description": "Instant from which the superseded version is no longer usable for new decisions, recorded without deleting the version.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-034", "SRC-045" ] } ], "artifacts": [ { "id": "money-svcstate-art-correction-plan", "name": "Monetary assertion correction plan", "description": "Declarative proposal naming the version to be superseded and its validator, the replacement amount, currency reference, scale and effective interval, the closure applied to the prior interval, the interval overlap/gap test results, the correction reason and agent, and the enumerated failure outcomes if the validator is stale. The host decides whether to apply it.", "media_or_form": [ "structured record", "reviewable change proposal", "diff-style summary" ], "serial": true, "identity_strategy": "Use the authoritative master-system change-request identifier where the host issues one; otherwise a governed IRI in a Dimension-controlled namespace; otherwise a ULID minted by the adopting Dimension. Plan identifiers never embed an effective date, an amount or a currency code.", "source_refs": [ "SRC-034", "SRC-041", "SRC-043", "SRC-047" ] } ], "inline_only_rationale": null } ] }, { "id": "money-svcstate-assurance-plane", "name": "Assurance plane: review evidence and disposition readiness", "description": "What evidence must accompany a proposed monetary state change before it can be relied on, how eligibility is reported without deciding access, and how readiness for removal is assessed and handed to the parties that actually execute disposition.", "source_refs": [ "SRC-037", "SRC-042", "SRC-035", "SRC-045", "SRC-047", "SRC-036" ], "findings": [ { "id": "money-svcstate-review-evidence", "name": "Review and approval evidence for a proposed monetary state change", "description": "The evidence set that makes a proposed create, correction or disposition action reviewable: reviewer identity and asserted competence, the decision recorded, the securing proof and validity of the evidence, and an advisory eligibility statement that explicitly declines to decide access.", "source_refs": [ "SRC-037", "SRC-035", "SRC-045", "SRC-047", "SRC-036" ], "questions": [ { "id": "money-svcstate-q-review-evidence-set", "text": "Which evidence items must be present before a proposed monetary state change counts as reviewed?", "kind": "evidence", "answer_data": [ "Reviewer identity reference and the role under which the review was performed", "Review decision value and its decision instant", "Reference to the precondition report or correction plan actually reviewed, pinned by digest", "Supporting document references with integrity digests, and a named-gaps list where an item is missing" ] }, { "id": "money-svcstate-q-review-authority", "text": "Which authority is asserted to give the reviewer competence for this action, and where is that mandate recorded?", "kind": "authority", "answer_data": [ "Reference to the mandate, delegation or role assignment relied on", "Scope limits of the mandate, including amount thresholds and currency or host restrictions", "Validity interval of the mandate and its status reference", "Pointer to the external register that holds the mandate, with a statement that this model does not confer it" ] }, { "id": "money-svcstate-q-eligibility-advisory", "text": "What does the eligibility report assert, and what does it explicitly decline to determine?", "kind": "access", "answer_data": [ "Requested action and the target assertion version with its validator", "Attributes supplied about subject, object, operation and environment", "Advisory verdict drawn from eligible, not-eligible, indeterminate or not-applicable", "Explicit statement that the external authorization component issues the binding permit or deny and that this report may be disregarded" ] }, { "id": "money-svcstate-q-evidence-validity", "text": "How is review evidence checked for currency and revocation before anyone relies on it?", "kind": "validation", "answer_data": [ "Evidence validity interval and whether the check instant falls inside it", "Status or revocation list reference and the instant of the last successful status check", "Verification outcome for the securing proof or digest", "Aggregate completeness verdict listing every missing or stale item by name" ] } ], "data_elements": [ { "id": "money-svcstate-de-reviewer-ref", "name": "Reviewer reference", "description": "Reference to the agent that performed a review, with the role asserted for the review and the instant of their decision.", "value_kind": "reference", "cardinality": "1..n", "required": true, "source_refs": [ "SRC-034", "SRC-045" ] }, { "id": "money-svcstate-de-review-decision", "name": "Review decision value", "description": "Coded outcome of the review: approved, approved-with-conditions, rejected or returned-for-information.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-037", "SRC-045" ] }, { "id": "money-svcstate-de-authority-ref", "name": "Asserted authority reference", "description": "Reference to the external mandate or delegation relied on for the review, with its scope limits and validity interval.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-035", "SRC-045" ] }, { "id": "money-svcstate-de-eligibility-verdict", "name": "Advisory eligibility verdict", "description": "Non-binding verdict about whether the requested action appears permissible, alongside the attributes supplied to the external decision point.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-035", "SRC-036" ] }, { "id": "money-svcstate-de-evidence-status-ref", "name": "Evidence status reference", "description": "Reference to the revocation or status mechanism for a piece of review evidence, plus the instant of the last successful check.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-045" ] } ], "artifacts": [ { "id": "money-svcstate-art-review-record", "name": "Monetary change review record", "description": "Compiled evidence record for one proposed monetary state change: the reviewed plan or report pinned by digest, reviewer identities and asserted mandates, decision values and instants, evidence validity and status-check outcomes, the completeness verdict with named gaps, and the advisory eligibility statement with its explicit disclaimer of decision authority.", "media_or_form": [ "structured record", "signed or otherwise secured evidence set", "human-readable review summary" ], "serial": true, "identity_strategy": "Use the authoritative master-system review identifier from the governing workflow or case system where one exists; otherwise a governed IRI in a Dimension-controlled namespace; otherwise a UUID or ULID minted by the adopting Dimension. Review instants are content, never identifier components.", "source_refs": [ "SRC-037", "SRC-035", "SRC-045" ] } ], "inline_only_rationale": null }, { "id": "money-svcstate-disposition-readiness", "name": "Deletion and tombstone readiness for a monetary assertion", "description": "How readiness for removal is assessed and reported: which holds currently suspend disposition, which retention class governs and who owns it, what must survive as a tombstone so existing references stay interpretable, and which unresolved conditions block a verdict. Execution stays with the records authority and the host.", "source_refs": [ "SRC-037", "SRC-042", "SRC-043", "SRC-047" ], "questions": [ { "id": "money-svcstate-q-hold-state", "text": "Which holds or freezes currently suspend disposition of this assertion, and where does each one originate?", "kind": "retention", "answer_data": [ "Hold identifier, issuing authority reference and the instrument type relied on", "Hold scope: whether it attaches to the assertion, the host record or a wider aggregate", "Applied instant and lift instant where known, with the lift request reference", "Effect statement recording that scheduled disposition is suspended until the hold is formally lifted" ] }, { "id": "money-svcstate-q-retention-class", "text": "Which retention class or records schedule governs this assertion, and which authority owns that schedule?", "kind": "ownership", "answer_data": [ "Retention class or records-schedule reference and its version", "Owning records authority reference and contact route", "Retention trigger event and period as recorded by that authority, carried as a reference value", "Explicit statement that this model neither sets, interprets nor executes the schedule" ] }, { "id": "money-svcstate-q-tombstone-content", "text": "What must remain after removal so that references from the host and from prior versions stay interpretable?", "kind": "composition", "answer_data": [ "Tombstone marker carrying the assertion identifier and version-series identifier", "Removal instant and coded removal reason", "Reference to the disposition authorisation relied on", "Rule that the amount, the currency code and the effective interval values are not retained in the tombstone, and that the identifier is never reused" ] }, { "id": "money-svcstate-q-disposition-blockers", "text": "Which unresolved conditions block a readiness verdict, and how is an incomplete assessment expressed?", "kind": "exception", "answer_data": [ "Blocker list typed as active hold, unresolved host reference, missing or stale schedule reference, or pending review", "Per-blocker severity and the external owner responsible for clearing it", "Aggregate verdict drawn from ready, blocked or indeterminate, never from a silent default", "Re-evaluation instant and the structured failure descriptor for an unassessable assertion" ] } ], "data_elements": [ { "id": "money-svcstate-de-hold-ref", "name": "Applicable hold reference", "description": "Reference to a hold or freeze that suspends scheduled disposition, with its issuing authority, scope and applied instant.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-042" ] }, { "id": "money-svcstate-de-retention-class-ref", "name": "Retention class reference", "description": "Reference to the externally owned retention class or records schedule that governs the assertion, including its version.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-037" ] }, { "id": "money-svcstate-de-tombstone-marker", "name": "Tombstone marker", "description": "Post-removal placeholder holding the assertion identifier, version-series identifier, removal instant, removal reason and disposition authorisation reference, and nothing of the monetary content.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-043", "SRC-037" ] }, { "id": "money-svcstate-de-readiness-verdict", "name": "Disposition readiness verdict", "description": "Aggregate assessment of whether the assertion is ready for disposition, blocked, or cannot be assessed, with the blocker list attached.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-037", "SRC-042", "SRC-047" ] } ], "artifacts": [ { "id": "money-svcstate-art-readiness-report", "name": "Disposition readiness report", "description": "Declarative report listing every hold in force, the referenced retention class and its owning authority, the reference-integrity results, the proposed tombstone content, the blocker list with owners and severities, and the aggregate verdict with a re-evaluation instant. It is an input to the records authority's decision and is never evidence that destruction occurred.", "media_or_form": [ "structured record", "human-readable readiness statement", "reference-only pointer set" ], "serial": true, "identity_strategy": "Use the authoritative master-system disposition-case identifier issued by the records authority where one exists; otherwise a governed IRI in a Dimension-controlled namespace; otherwise a ULID minted by the adopting Dimension. Report identifiers never encode a retention date or a removal instant.", "source_refs": [ "SRC-037", "SRC-042", "SRC-047" ] } ], "inline_only_rationale": null } ] } ] }, { "id": "money-svccalc-operations", "name": "Monetary calculation, reconciliation and projection operations", "description": "The operation surface that turns a stored monetary value into a defensible computed, compared or published result: admissibility validation, quantisation, valuation and conversion with lineage, reconciliation against tolerance, and lossy or redacted export.", "rationale": "Monetary correctness fails at the operation boundary, not at the field boundary. Standards fix the code list and the amount shape, but the reproducibility of a derived value depends on which rate, which reference time, which rounding policy and which tolerance were bound — and on whether the original amount and currency survived the derivation. Grouping these as one bundle keeps arithmetic, provenance and outcome semantics under a single contract while leaving rate acquisition, posting, persistence and authorisation to their owners.", "source_refs": [ "SRC-032", "SRC-049", "SRC-023", "SRC-050" ], "layers": [ { "id": "money-svccalc-layer-admission", "name": "Admission and quantisation", "description": "Whether a monetary value may enter a calculation at all, and how it is brought to a target scale without silently losing or inventing value.", "source_refs": [ "SRC-001", "SRC-026", "SRC-050" ], "findings": [ { "id": "money-svccalc-finding-validate", "name": "Monetary value admissibility", "description": "The checks a monetary value must pass before any downstream calculation: the currency identifier resolves in the referenced register and has a status permitting the requested operation; the amount is an exact decimal rather than a binary floating-point approximation; the declared scale, digit limits and allowed currency set of the caller-pinned profile are satisfied; and the measurement basis and valuation instant are present. Failure produces a typed outcome rather than a coerced value.", "source_refs": [ "SRC-001", "SRC-032", "SRC-052", "SRC-027" ], "questions": [ { "id": "money-svccalc-q-validate-checks", "text": "Which admissibility checks must a monetary value pass before any downstream calculation is attempted?", "kind": "validation", "answer_data": [ "currency identifier resolvable in the referenced register version", "amount represented as an exact decimal with a declared scale", "scale not exceeding the profile digit limits", "measurement basis present", "valuation instant present with an explicit offset" ] }, { "id": "money-svccalc-q-validate-code-status", "text": "How is an unsupported, historic, fund or non-transactional currency identifier distinguished from an active transactional currency?", "kind": "classification", "answer_data": [ "register list membership (current, fund, historic)", "code status value", "withdrawal or replacement date", "successor code reference", "operations permitted for the status" ] }, { "id": "money-svccalc-q-validate-profile", "text": "Which profile-specific constraints — allowed currency set, maximum total digits, maximum fraction digits and amount bounds — apply to the calling context?", "kind": "constraint", "answer_data": [ "profile identifier and version", "allowed currency set", "maximum total digits", "maximum fraction digits", "minimum and maximum admissible amount" ] }, { "id": "money-svccalc-q-validate-outcome", "text": "What outcome is emitted when a value is inadmissible, and does that outcome block the operation or degrade it?", "kind": "exception", "answer_data": [ "outcome code from the model taxonomy", "severity", "blocking indicator", "pointer to the offending attribute", "human-readable reason" ] } ], "data_elements": [ { "id": "money-svccalc-de-currency-identifier", "name": "Currency identifier", "description": "The identifier of the currency in which the amount is denominated, resolved against a named register version rather than copied.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-001" ] }, { "id": "money-svccalc-de-amount-exact", "name": "Exact decimal amount", "description": "The amount as an exact decimal value with an explicitly declared scale; binary floating-point representation is inadmissible because it cannot represent common minor-unit fractions exactly.", "value_kind": "number", "cardinality": "1", "required": true, "source_refs": [ "SRC-026", "SRC-050" ] }, { "id": "money-svccalc-de-currency-status", "name": "Currency status", "description": "The status of the currency identifier in the referenced register version, distinguishing active, fund, historic and replaced codes and the operations each permits.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-001" ] }, { "id": "money-svccalc-de-profile-pin", "name": "Validation profile pin", "description": "Reference to the caller-pinned validation profile and its version, which supplies allowed currencies, digit limits and amount bounds for the context.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-052" ] }, { "id": "money-svccalc-de-validation-outcome", "name": "Validation outcome", "description": "Typed outcome codes emitted by admissibility evaluation, including unsupported currency, non-transactional code status, scale exceeded and missing measurement basis.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-001", "SRC-032" ] } ], "artifacts": [], "inline_only_rationale": "Admissibility evaluation yields a transient predicate result carried inline in the operation response alongside the value it describes. It has no independent identity, no lifecycle and no distribution of its own: the same value re-validated against a different profile yields a different result, so a stored validation object would be misleading rather than authoritative. The durable evidence record, if the adopting Dimension needs one, is created and retained by the referenced audit or records system, whose evidence and audit-trail semantics this model does not own." }, { "id": "money-svccalc-finding-quantize", "name": "Quantisation, rounding policy and residual", "description": "How an exact amount is brought to a target scale: the target scale (usually but not always the currency minor unit), the rounding mode and tie-breaking rule, the resulting residual, and how a residual is allocated when a total is split across components so that the parts still sum to the whole. Precision loss is an explicit, declared outcome rather than an invisible side effect.", "source_refs": [ "SRC-001", "SRC-049", "SRC-026", "SRC-050", "SRC-051" ], "questions": [ { "id": "money-svccalc-q-quantize-policy", "text": "What rounding policy — target scale, rounding mode and tie-breaking rule — governs quantisation of this amount?", "kind": "requirement", "answer_data": [ "target scale", "rounding mode", "tie-breaking rule", "policy profile identifier and version", "order of quantisation relative to other operations" ] }, { "id": "money-svccalc-q-quantize-residual", "text": "What residual arises from quantisation, and how is it computed, reported or allocated across components?", "kind": "measurement", "answer_data": [ "residual amount and currency", "residual sign", "allocation method for split totals", "component receiving the residual", "post-allocation sum check" ] }, { "id": "money-svccalc-q-quantize-scale-deviation", "text": "When may the target scale differ from the currency minor unit, and which authority pins that deviation?", "kind": "authority", "answer_data": [ "declared target scale", "minor unit from the register", "deviation reason code", "pinning authority reference", "scope in which the deviation is valid" ] }, { "id": "money-svccalc-q-quantize-precision-loss", "text": "How is precision loss detected and expressed so that a consumer knows the value is no longer exact?", "kind": "quality", "answer_data": [ "exactness indicator", "declared decimals of the result", "implied value interval", "precision-loss outcome code", "original exact value reference" ] } ], "data_elements": [ { "id": "money-svccalc-de-declared-scale", "name": "Declared scale", "description": "The number of fractional digits to which the amount is stated, which may equal the currency minor unit or a pinned deviation from it.", "value_kind": "number", "cardinality": "1", "required": true, "source_refs": [ "SRC-001", "SRC-026" ] }, { "id": "money-svccalc-de-rounding-mode", "name": "Rounding mode and tie rule", "description": "The rounding mode applied and the tie-breaking rule used when a value falls exactly half-way, stated explicitly because regimes differ.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-050", "SRC-051" ] }, { "id": "money-svccalc-de-residual", "name": "Quantisation residual", "description": "The signed difference between the exact input amount and the quantised result, expressed in the same currency.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-050" ] }, { "id": "money-svccalc-de-value-interval", "name": "Implied value interval", "description": "The interval of plausible source values implied by the declared decimals and rounding mode of a quantised amount, used later for tolerance evaluation.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-049", "SRC-026" ] }, { "id": "money-svccalc-de-exactness-indicator", "name": "Exactness indicator", "description": "Whether the stated amount is exact or the product of a lossy quantisation.", "value_kind": "boolean", "cardinality": "1", "required": true, "source_refs": [ "SRC-026" ] } ], "artifacts": [ { "id": "money-svccalc-artifact-rounding-policy-profile", "name": "Rounding policy profile", "description": "A declarative, versioned profile stating target scale rules per currency or context, rounding mode, tie-breaking rule, residual allocation method and the order of quantisation relative to conversion. It is referenced by derivations so that a historical result remains reproducible after the policy changes.", "media_or_form": [ "structured policy record", "human-readable policy document" ], "serial": true, "identity_strategy": "Authoritative identifier issued by the adopting Dimension's policy registry plus an immutable version identifier; where no registry identifier exists, a ULID assigned by the adopting Dimension. The effective-from instant is an attribute, never the identifier.", "source_refs": [ "SRC-050", "SRC-051" ] }, { "id": "money-svccalc-artifact-quantisation-record", "name": "Quantisation record", "description": "The reportable result of one quantisation: exact input amount and currency, target scale, applied policy profile reference, quantised output, signed residual, exactness indicator and implied value interval.", "media_or_form": [ "structured record" ], "serial": false, "identity_strategy": "Identifier of the operation invocation supplied by the caller if it has one; otherwise a ULID assigned by the adopting Dimension, bound to the content hash of the input amount, policy reference and output.", "source_refs": [ "SRC-049", "SRC-026" ] } ], "inline_only_rationale": null } ] }, { "id": "money-svccalc-layer-valuation", "name": "Valuation and conversion", "description": "How a monetary value is restated in another currency or measurement basis using an externally supplied rate binding, and what lineage must travel with the result so it can be reproduced or refuted.", "source_refs": [ "SRC-032", "SRC-033", "SRC-023", "SRC-012", "SRC-050" ], "findings": [ { "id": "money-svccalc-finding-convert", "name": "Rate binding, conversion arithmetic and derivation lineage", "description": "The complete binding needed to make a conversion reproducible: which rate source and publication supplied the rate, the base and quote currencies and quotation direction, the reference time the rate represents versus the instant it was retrieved, any intermediate leg in a rate chain, the measurement basis of the result, the intermediate precision and the point at which quantisation is applied. The derived value always carries the original amount and currency; it never replaces them.", "source_refs": [ "SRC-032", "SRC-033", "SRC-023", "SRC-012", "SRC-050", "SRC-051", "SRC-027" ], "questions": [ { "id": "money-svccalc-q-convert-provenance", "text": "Which rate source, publication and retrieval act produced the rate used for this derivation?", "kind": "provenance", "answer_data": [ "rate source identifier or URI", "publication or dataset version reference", "publication instant", "retrieval instant", "observability classification of the input" ] }, { "id": "money-svccalc-q-convert-direction", "text": "How are base and quote currencies, quotation direction and any intermediate leg expressed so the computation can be reproduced exactly?", "kind": "composition", "answer_data": [ "base currency", "quote currency", "quotation direction", "rate value with its own significant figures", "ordered rate chain legs and pivot currency" ] }, { "id": "money-svccalc-q-convert-reference-time", "text": "Which reference time governs rate selection, and how does it differ from the valuation instant and the retrieval instant?", "kind": "temporal", "answer_data": [ "rate reference instant", "valuation or measurement instant", "retrieval instant", "reference-time selector (transaction date, measurement date, period-pinned rate)", "staleness threshold" ] }, { "id": "money-svccalc-q-convert-arithmetic", "text": "What arithmetic rules constrain the computation: multiplication versus division, permissibility of an inverse rate, intermediate scale and the order of quantisation?", "kind": "constraint", "answer_data": [ "operation applied (multiply or divide)", "inverse-rate permission flag and its authority", "significant figures retained in the rate", "intermediate scale before final quantisation", "order of quantisation relative to chaining" ] } ], "data_elements": [ { "id": "money-svccalc-de-original-value", "name": "Original amount and currency", "description": "The unmodified source amount and currency retained on every derived value, so that a derivation can always be re-run or reversed.", "value_kind": "object", "cardinality": "1", "required": true, "source_refs": [ "SRC-032", "SRC-050" ] }, { "id": "money-svccalc-de-rate-source-reference", "name": "Rate source reference", "description": "Identifier of the external publisher, dataset and publication instance that supplied the rate, together with any stated fitness-for-purpose limitation.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-023", "SRC-012" ] }, { "id": "money-svccalc-de-rate-value", "name": "Rate value and direction", "description": "The rate as published, with base currency, quote currency, quotation direction and the significant figures in which it was published.", "value_kind": "object", "cardinality": "1", "required": true, "source_refs": [ "SRC-023", "SRC-050" ] }, { "id": "money-svccalc-de-rate-reference-instant", "name": "Rate reference instant", "description": "The instant the rate is deemed to represent, distinct from the instant it was retrieved.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-023", "SRC-027" ] }, { "id": "money-svccalc-de-rate-retrieval-instant", "name": "Rate retrieval instant", "description": "The instant at which the rate was obtained by the calling system, recorded separately to expose staleness.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-012", "SRC-027" ] }, { "id": "money-svccalc-de-rate-chain", "name": "Rate chain", "description": "The ordered sequence of legs, including any pivot currency, when no direct rate exists between base and quote currency.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-050", "SRC-051" ] }, { "id": "money-svccalc-de-measurement-basis", "name": "Measurement basis", "description": "The basis on which the value is measured, such as historical cost at transaction date, closing-rate restatement, or a fair value measured at a stated measurement date.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-032", "SRC-033" ] }, { "id": "money-svccalc-de-derivation-outcome", "name": "Derivation outcome", "description": "Typed outcome codes for conversion, including rate missing, rate stale beyond threshold, ambiguous rate among several published rates, currency not exchangeable, invalid or prohibited inverse, zero or non-positive rate, and precision loss.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-032", "SRC-023", "SRC-050" ] } ], "artifacts": [ { "id": "money-svccalc-artifact-derivation-record", "name": "Derivation record", "description": "The self-contained lineage object that accompanies a derived monetary value: original amount and currency, rate binding with direction and chain, rate reference and retrieval instants, measurement basis, applied rounding policy reference, intermediate values, residual, final quantised result and any outcome codes. A third party holding only this record can recompute the result.", "media_or_form": [ "structured record" ], "serial": false, "identity_strategy": "Master-system derivation identifier where the calling system issues one; otherwise a ULID assigned by the adopting Dimension, bound to a content hash over original value, rate binding, reference instant and policy reference. The valuation date is an attribute, never the identifier.", "source_refs": [ "SRC-032", "SRC-023", "SRC-050", "SRC-027" ] }, { "id": "money-svccalc-artifact-rate-binding", "name": "Rate binding", "description": "The reusable, citable statement of which rate applies for a given currency pair, reference time and policy context, including the source reference, direction, published significant figures, staleness threshold and permitted use. It is consumed as input; this model does not produce or publish rates.", "media_or_form": [ "structured record" ], "serial": false, "identity_strategy": "Identifier assigned by the external rate publisher or the adopting Dimension's rate catalogue; failing that, a ULID assigned by the adopting Dimension, qualified by the source reference and reference instant as attributes.", "source_refs": [ "SRC-023", "SRC-012" ] } ], "inline_only_rationale": null } ] }, { "id": "money-svccalc-layer-assurance", "name": "Reconciliation and projection", "description": "How derived and stated monetary values are checked against one another within a declared tolerance, and how they are projected outward — including deliberately lossy, rounded, banded or suppressed forms.", "source_refs": [ "SRC-049", "SRC-026", "SRC-052", "SRC-053" ], "findings": [ { "id": "money-svccalc-finding-reconcile", "name": "Reconciliation against declared tolerance", "description": "Comparison of a set of monetary values — components against a total, a restated value against an independently stated one, or a computed balance against a reported balance — where comparability requires the same currency, compatible measurement bases and a stated reference time. Tolerance is derived from declared precision intervals, an absolute band or a relative band, and is always declared, never assumed. Outside-tolerance difference is a reportable outcome with attribution, not an error to be absorbed.", "source_refs": [ "SRC-049", "SRC-026", "SRC-032", "SRC-050" ], "questions": [ { "id": "money-svccalc-q-reconcile-tolerance", "text": "What tolerance applies to this reconciliation, and is it derived from declared decimals, an absolute band or a relative band?", "kind": "measurement", "answer_data": [ "tolerance basis", "tolerance value or interval derivation rule", "rounding mode assumed by the interval", "aggregate interval of contributing values", "comparison verdict" ] }, { "id": "money-svccalc-q-reconcile-comparability", "text": "Which values form the reconciliation set, and on what basis are they comparable to each other?", "kind": "relationship", "answer_data": [ "member value references and roles", "common currency", "measurement basis compatibility statement", "common reference time or period", "signed weight of each contribution" ] }, { "id": "money-svccalc-q-reconcile-breach", "text": "What is emitted when the difference falls outside tolerance, and how is the unexplained residual attributed?", "kind": "exception", "answer_data": [ "out-of-tolerance outcome code", "signed difference amount and currency", "explained portion with cause references", "unexplained residual", "attribution to quantisation, rate binding or missing member" ] }, { "id": "money-svccalc-q-reconcile-evidence", "text": "What must accompany a reconciliation result so that an independent party can recompute the same verdict?", "kind": "evidence", "answer_data": [ "input value references with declared decimals", "tolerance declaration", "applied rounding policy reference", "derivation record references for restated members", "computed difference and verdict" ] } ], "data_elements": [ { "id": "money-svccalc-de-reconciliation-set", "name": "Reconciliation set", "description": "The ordered set of member monetary values with their roles and signed weights that participate in a single reconciliation.", "value_kind": "collection", "cardinality": "1..n", "required": true, "source_refs": [ "SRC-049" ] }, { "id": "money-svccalc-de-tolerance-declaration", "name": "Tolerance declaration", "description": "The declared basis and value of the permitted difference, including whether it is derived from precision intervals, an absolute band or a relative band.", "value_kind": "object", "cardinality": "1", "required": true, "source_refs": [ "SRC-049", "SRC-026" ] }, { "id": "money-svccalc-de-difference", "name": "Reconciliation difference", "description": "The signed difference between the reported and computed totals, expressed in the common currency of the set.", "value_kind": "quantity", "cardinality": "1", "required": true, "source_refs": [ "SRC-049" ] }, { "id": "money-svccalc-de-reconciliation-verdict", "name": "Reconciliation verdict", "description": "The typed verdict of the comparison: consistent within tolerance, outside tolerance, or not evaluable because members are incomparable or incomplete.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-049" ] }, { "id": "money-svccalc-de-difference-attribution", "name": "Difference attribution", "description": "Decomposition of the difference into explained causes such as quantisation residual, differing rate binding or differing measurement basis, plus the unexplained remainder.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-032", "SRC-050" ] } ], "artifacts": [ { "id": "money-svccalc-artifact-reconciliation-statement", "name": "Reconciliation statement", "description": "The reportable output of one reconciliation run: the member set with declared decimals, the tolerance declaration and its basis, the computed and reported totals, the signed difference, the verdict and the attribution of the difference. It reports; it does not correct, post or approve.", "media_or_form": [ "structured record", "tabular statement" ], "serial": true, "identity_strategy": "Master-system run identifier issued by the calling reconciliation process where one exists; otherwise a ULID assigned by the adopting Dimension, with the run sequence number and period as attributes rather than identifier components.", "source_refs": [ "SRC-049", "SRC-026" ] } ], "inline_only_rationale": null }, { "id": "money-svccalc-finding-export", "name": "Projection, lossy export and redaction", "description": "Projection of a monetary value into a target representation — a message field, a reporting fact, a tabular cell or a display string — and the deliberate degradation of that projection through scaling, banding, rounding or suppression. The projection declares its own losses: whether the exported value is exact, rounded to a coarser scale, an interval, or suppressed; whether it remains reconcilable; and under which external authorisation any redaction was applied.", "source_refs": [ "SRC-026", "SRC-052", "SRC-053", "SRC-010" ], "questions": [ { "id": "money-svccalc-q-export-target", "text": "Into which target representation is the value projected, and how are amount, currency and precision mapped without changing meaning?", "kind": "interoperability", "answer_data": [ "target representation identifier and version", "amount field mapping", "currency field mapping", "precision or decimals mapping", "scale factor applied" ] }, { "id": "money-svccalc-q-export-redaction", "text": "Which redaction or generalisation operations are applied to the projected value, and which authorisation decision directed them?", "kind": "access", "answer_data": [ "operation applied (suppression, banding, controlled rounding, interval publication)", "affected cells or attributes", "authorisation decision reference", "requesting audience or purpose", "secondary suppression set" ] }, { "id": "money-svccalc-q-export-loss-declaration", "text": "How does the projection declare that it is lossy, non-reconcilable or partially suppressed?", "kind": "quality", "answer_data": [ "lossiness indicator", "reconcilability indicator", "declared decimals or interval of the exported value", "suppression markers", "information-loss measure" ] }, { "id": "money-svccalc-q-export-currency", "text": "How long may a projection be treated as current, and what marks it as superseded by a newer derivation?", "kind": "retention", "answer_data": [ "projection creation instant", "validity horizon or as-of statement", "superseding projection reference", "underlying derivation record reference", "supersession reason" ] } ], "data_elements": [ { "id": "money-svccalc-de-projection-target", "name": "Projection target", "description": "Identifier and version of the target representation into which the monetary value is mapped.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-052", "SRC-010" ] }, { "id": "money-svccalc-de-scale-factor", "name": "Applied scale factor", "description": "Any presentation scaling applied to the exported amount, such as thousands or millions, recorded so the underlying magnitude remains recoverable.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-026" ] }, { "id": "money-svccalc-de-redaction-operation", "name": "Redaction operation", "description": "The disclosure-protection operation applied to the projected value, such as primary or secondary suppression, controlled or random rounding, or publication as an interval.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-053" ] }, { "id": "money-svccalc-de-authorisation-reference", "name": "Authorisation decision reference", "description": "Reference to the externally made authorisation or disclosure decision that directed the redaction; this model carries the reference and never makes the decision.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-053" ] }, { "id": "money-svccalc-de-lossiness-declaration", "name": "Lossiness declaration", "description": "Explicit statement of whether the projected value is exact, rounded, banded or suppressed, and whether it can still participate in reconciliation.", "value_kind": "object", "cardinality": "1", "required": true, "source_refs": [ "SRC-026", "SRC-053" ] } ], "artifacts": [ { "id": "money-svccalc-artifact-projection-manifest", "name": "Projection manifest", "description": "The declaration accompanying an exported set of monetary values: target representation and version, field mappings, applied scale factor, per-value lossiness and reconcilability indicators, redaction operations with their authorisation references, and the derivation records behind any restated value.", "media_or_form": [ "structured manifest", "human-readable export note" ], "serial": false, "identity_strategy": "Export identifier issued by the master system performing the export where one exists; otherwise a ULID assigned by the adopting Dimension, bound to a content hash of the projected value set. The export date is an attribute, never the identifier.", "source_refs": [ "SRC-052", "SRC-053" ] } ], "inline_only_rationale": null } ] } ] } ] }, "functions": [ { "id": "money-core-fn-parse-amount", "name": "Parse and normalize an exact decimal amount", "description": "Accepts an amount as a decimal lexical token or as an explicit coefficient-and-scale pair, and produces a normalized sign, coefficient and scale together with the canonical lexical form. Rejects any input that cannot be held exactly at the declared scale; it never rounds silently and never accepts a binary floating-point source as authoritative.", "inputs": [ "Amount as a decimal lexical token or as an explicit coefficient-and-scale pair", "Declared scale for the host field", "Total-digit and fraction-digit bounds in force", "Negative-zero policy" ], "outputs": [ "Normalized sign, coefficient and scale", "Canonical lexical form of the amount", "Parse and validation diagnostics" ], "preconditions": [ "The input is a decimal lexical form or an exact coefficient-and-scale pair, not a binary floating-point value", "The declared scale and digit bounds are supplied by the host or profile", "The negative-zero policy is declared where a signed zero can occur" ], "effects": [ "Rejects an input that is not exactly representable at the declared scale and records the reason", "Preserves the declared scale so that trailing-zero significance is not lost", "Produces a canonical form suitable for storage, hashing and equality", "Performs no rounding, no arithmetic and no currency conversion" ], "source_refs": [ "SRC-004", "SRC-005", "SRC-006", "SRC-008" ] }, { "id": "money-core-fn-validate-currency-ref", "name": "Validate the currency reference against the pinned catalogue edition", "description": "Resolves the declared currency code against the pinned, integrity-verified catalogue snapshot and reports the entry's class, status and published minor unit, or reports the code as unresolved. It reads the catalogue; it never allocates, amends or withdraws a code, and it never substitutes a default currency.", "inputs": [ "Alphabetic currency code and optional numeric code", "Catalogue identifier, list designator and pinned published edition", "Integrity digest of the retained catalogue snapshot", "Set of code classes the host field permits" ], "outputs": [ "Resolution status for the code", "Resolved code class and status as at the pinned edition", "Published minor unit value or an explicit not-applicable flag", "Mismatch and unresolved diagnostics" ], "preconditions": [ "A catalogue snapshot for the declared edition is retained and its digest verifies", "The catalogue and list the code belongs to are declared on the reference", "The host has declared which code classes it accepts" ], "effects": [ "Marks an unresolved or class-disallowed code explicitly rather than substituting any currency", "Reports disagreement between the alphabetic and numeric forms without choosing one silently", "Forces an explicit host-declared scale when the catalogue publishes no applicable minor unit", "Makes no change to catalogue content and no assertion about jurisdiction, legal tender or exchangeability" ], "source_refs": [ "SRC-001", "SRC-002", "SRC-003", "SRC-010" ] }, { "id": "money-core-fn-classify-value-state", "name": "Determine the declared value determinacy state", "description": "Inspects a monetary declaration and reports whether it asserts an exact point value, an interval, an approximate value or an explicit absence with a reason, flagging contradictory combinations. Its purpose is to keep an absent or unknown value from collapsing into a numeric zero.", "inputs": [ "Monetary declaration payload", "Declared determinacy-state vocabulary", "Declared absent-reason vocabulary", "Interval endpoints where present" ], "outputs": [ "Determinacy state code", "Absent reason where the declaration asserts no amount", "Interval endpoint set with inclusivity flags", "Contradiction diagnostics" ], "preconditions": [ "The adopting Dimension has declared the determinacy-state and absent-reason vocabularies", "Interval endpoints, where present, each carry a currency reference and a declared scale" ], "effects": [ "Rejects a numeric zero offered in place of an absent, unknown or not-applicable value", "Flags a declaration that simultaneously asserts an amount and an absence", "Flags interval endpoints whose currency references or scales disagree", "Assigns no business meaning to the state and takes no action on the host record" ], "source_refs": [ "SRC-008", "SRC-009", "SRC-011" ] }, { "id": "money-core-fn-compare-same-currency", "name": "Compare exact same-currency representations", "description": "Compares two exact point declarations that resolve to the same currency code under the same catalogue, returning an ordering or equality result. Whether the two declarations are policy-compatible for comparison is supplied externally; the function neither judges compatibility nor converts between currencies.", "inputs": [ "Two normalized monetary declarations", "Externally supplied policy-compatibility assertion", "Trailing-zero significance policy to apply to equality" ], "outputs": [ "Comparison result, or an explicit not-comparable outcome", "Reason code when comparison is refused", "Statement of the equality semantics applied" ], "preconditions": [ "Both declarations assert an exact point value rather than an interval, approximation or absence", "Both currency references resolve to the same code under the same catalogue and pinned edition", "A policy-compatibility assertion is supplied by the caller" ], "effects": [ "Refuses comparison across differing currency codes or differing catalogues and returns a reason", "Refuses comparison when the external compatibility assertion is missing", "Distinguishes numeric equality from representational identity according to the trailing-zero policy", "Performs no currency conversion, no rate lookup and no arithmetic beyond comparison" ], "source_refs": [ "SRC-005", "SRC-007", "SRC-008", "SRC-010" ] }, { "id": "money-policy-validate-precision-policy", "name": "Validate a monetary precision and rounding policy declaration", "description": "Checks that a declared precision and rounding policy is complete, internally consistent and resolvable: currency binding with a pinned list version, declared scale or increment, rounding mode, tie rule, precision tier and channel scope.", "inputs": [ "policy declaration under review", "currency precision profile snapshot reference", "exchange-profile digit limits where a profile is named" ], "outputs": [ "validation verdict of valid, invalid or incomplete", "defect list naming the declaration element at fault for each unmet requirement", "resolved effective policy view for the caller" ], "preconditions": [ "the currency code resolves within a pinned maintenance-agency list version", "the policy declares an effective-from timestamp" ], "effects": [ "returns a verdict and defect list to the caller", "does not alter any monetary value, and does not apply, enforce or persist the policy" ], "source_refs": [ "SRC-005", "SRC-001", "SRC-010", "SRC-018" ] }, { "id": "money-policy-quantize-under-explicit-rule", "name": "Quantize an amount under an explicitly named rule", "description": "Applies one named quantization rule — target exponent or non-decimal increment, mode, tie handling — to an amount and returns the quantized value together with every condition raised. No default rule is supplied: an unnamed rule is a failure, never a licence to assume two decimals or half-up.", "inputs": [ "source amount with its currency binding", "quantization policy record reference and version", "arithmetic context precision and digit capacity" ], "outputs": [ "quantized amount carrying its declared scale or increment", "raised signal set covering inexact, rounded, clamped, invalid-operation, overflow and underflow", "rule reference and version stamped onto the result" ], "preconditions": [ "the caller names a quantization rule explicitly", "the target exponent or increment is representable within the declared digit capacity" ], "effects": [ "returns a new value; the source value is not mutated", "raises an explicit failure when the result is not representable, instead of truncating or clamping silently", "does not persist the result, enforce the rule or write an audit entry" ], "source_refs": [ "SRC-006", "SRC-005", "SRC-013", "SRC-015", "SRC-016" ] }, { "id": "money-policy-expose-residual", "name": "Expose the residual introduced by quantization", "description": "Computes the signed difference between a pre-quantization value and its quantized result, or between two declared precision tiers, and returns it as a first-class amount so the host can disclose, carry or assign it.", "inputs": [ "pre-quantization amount", "quantized amount", "identifiers of the two tiers being compared", "host-supplied tolerance threshold where one is provided" ], "outputs": [ "residual amount with currency binding and scale", "direction of the residual relative to the payer", "comparison of the residual against the supplied threshold where one is provided" ], "preconditions": [ "both values share the same currency binding", "both values reference the same quantization policy version" ], "effects": [ "makes the residual visible to the caller instead of absorbing it", "does not decide who bears the residual; that decision belongs to the host or to the applicable rule", "does not set or derive the tolerance threshold it reports against" ], "source_refs": [ "SRC-014", "SRC-018", "SRC-019" ] }, { "id": "money-policy-allocate-with-reconciliation", "name": "Allocate a total into quantized parts that reconcile exactly", "description": "Distributes a total across parts under a named allocation rule with per-part quantization, assigns the residual to the target designated by the caller's rule, and returns a reconciliation difference that must be zero.", "inputs": [ "total amount with its currency binding", "allocation basis or weights in a deterministic order", "allocation rule reference and version", "per-part quantization rule reference", "residual assignment target" ], "outputs": [ "ordered set of quantized parts", "residual amount and its assigned target", "reconciliation difference", "reproducibility fingerprint over the recorded inputs and rule versions" ], "preconditions": [ "the allocation rule and the residual assignment target are stated explicitly", "every part shares the total's currency binding", "the input ordering is deterministic" ], "effects": [ "guarantees that the sum of parts plus the assigned residual equals the total, or fails explicitly", "returns the result to the caller without posting, settling, enforcing or auditing it" ], "source_refs": [ "SRC-013", "SRC-014", "SRC-010", "SRC-018" ] }, { "id": "money-policy-compare-or-aggregate-compatible-values", "name": "Compare, order or aggregate values only under a compatible context", "description": "Evaluates the compatibility predicate over currency binding, valuation basis and rounding context, and only then compares, orders or sums the values; otherwise it refuses with a typed incompatibility reason. It never converts, normalises or coerces implicitly.", "inputs": [ "set of monetary values with their context declarations", "requested operation of equality, ordering or aggregation", "equality semantics selection", "host-supplied tolerance where the operation permits one" ], "outputs": [ "operation result with the governing context stamped onto it", "typed refusal naming the incompatible attributes where the predicate fails", "record of the tolerance applied and its owner reference" ], "preconditions": [ "every input value declares a currency binding and a rounding context", "the equality semantics is stated when the values differ in scale" ], "effects": [ "prohibits implicit currency conversion and implicit re-quantization", "returns an explicit refusal rather than a best-effort answer", "does not source, select or apply an exchange rate, and does not persist the comparison outcome" ], "source_refs": [ "SRC-013", "SRC-014", "SRC-010", "SRC-019" ] }, { "id": "money-val-fn-bind-valuation-context", "name": "Bind valuation context to an amount", "description": "Attaches a complete, versioned valuation frame — amount role, valuation instant and temporal kind, measurement basis with its defining authority, and market or scenario reference — to an amount that already exists in its owning record, without altering the amount value or currency.", "inputs": [ "Amount instance reference and its currency code", "Amount role code with classifier scheme version", "Valuation instant with seconds and offset, plus temporal kind", "Measurement basis code and defining authority reference", "Market, session or scenario reference" ], "outputs": [ "Bound valuation context attached to the amount instance", "Completeness report listing any missing mandatory context", "Ingestion instant recorded separately from the valuation instant" ], "preconditions": [ "The amount value and ISO 4217 currency designation are already established by the owning system of record", "The currency code exists in the register version applicable at the valuation instant", "All referenced classifier schemes resolve to a concrete version" ], "effects": [ "Creates a valuation assertion referencing the amount; never modifies the amount value, currency or the owning record", "Pins classifier versions so a later scheme change cannot retroactively reinterpret the assertion", "Records asserting identity and ingestion instant alongside the valuation instant" ], "source_refs": [ "SRC-020", "SRC-021", "SRC-027", "SRC-001" ] }, { "id": "money-val-fn-select-declared-rate", "name": "Select a declared rate under a caller-supplied policy", "description": "Applies caller-supplied selection criteria — admissible sources, rate type, session, staleness tolerance and fallback order — to the candidate rate references resolvable in the owning publication model, and records which candidate was selected and why the others were not.", "inputs": [ "Base and quote currency codes and required direction", "Valuation instant and required effective coverage", "Caller-supplied selection policy identifier and criteria set" ], "outputs": [ "Selected rate reference with series and observation key, effective interval, status and declared accuracy", "Rejection reasons for each considered candidate", "Record of the policy identifier and version that was applied" ], "preconditions": [ "Candidate rate references are resolvable in the owning publication model", "The caller supplies the selection criteria; this model holds no default policy of its own", "The requested currency pair is not suspended by the chosen source at the valuation instant" ], "effects": [ "Records a selection outcome bound to the valuation assertion", "Performs no rate determination, calculation, aggregation or benchmark administration", "Applies declared criteria deterministically and records the result; policy authoring, approval, runtime evaluation and enforcement remain with the adopting Dimension's policy model" ], "source_refs": [ "SRC-023", "SRC-024", "SRC-028", "SRC-029" ] }, { "id": "money-val-fn-calculate-conversion", "name": "Calculate a reproducible conversion", "description": "Derives a converted amount from a preserved original using the selected rate or rate chain, applying a declared equation, chain ordering and rounding parameters, and emitting the full reproduction input set alongside the result.", "inputs": [ "Original amount value and currency code", "Selected rate reference or ordered rate chain with pivot currencies", "Derivation method, working precision, rounding mode and target minor unit" ], "outputs": [ "Converted amount value with declared accuracy and target currency code", "Conversion equation expression and ordered rounding trace", "Reproduction input set and its content digest" ], "preconditions": [ "The selected rate covers the valuation instant and satisfies the declared staleness tolerance", "The target currency minor unit resolves from the ISO 4217 register version applicable at the valuation instant", "Any intermediate chain step declares whether rounding is permitted at that step" ], "effects": [ "Creates a converted amount linked to the original; the original is never overwritten, replaced or masked", "Records the equation, chain and rounding order so the result can be independently recomputed", "Leaves fees, spreads, mark-ups and taxes as separate references and never folds them into the rate or the converted amount" ], "source_refs": [ "SRC-025", "SRC-026", "SRC-001", "SRC-023" ] }, { "id": "money-val-fn-reconcile-original-reported", "name": "Reconcile original and reported values", "description": "Recomputes a stored converted or reported amount from its retained reproduction inputs and compares the result with the stored value, classifying the outcome against the declared tolerance.", "inputs": [ "Original amount and the stored converted or reported amount", "Reproduction input set with pinned versions", "Declared recomputation tolerance" ], "outputs": [ "Reconciliation outcome: reproduced, within tolerance, or disputed", "Residual difference expressed in the target currency minor unit", "Discrepancy findings identifying the divergent input" ], "preconditions": [ "Both amounts carry declared role codes and a shared derivation lineage", "The reproduction input set is complete and its references still resolve", "The tolerance has a named owner and version" ], "effects": [ "Records the reconciliation outcome against the valuation assertion", "Marks a disputed assertion for correction rather than silently recomputing or overwriting the stored value", "Does not post accounting entries, adjust ledgers or execute remediation; those belong to the accounting and workflow models" ], "source_refs": [ "SRC-026", "SRC-025", "SRC-020" ] }, { "id": "money-val-fn-record-correction", "name": "Record a correction or supersession", "description": "Issues a correcting valuation assertion that supersedes a prior one, capturing the reason, effective interval, issuer and approver, and emitting a serially numbered correction notice for the referenced notification and audit models.", "inputs": [ "Reference to the assertion being superseded", "Correction reason code and triggering event reference", "Corrected context or values with pinned classifier versions", "Issuer identity and independent approver identity" ], "outputs": [ "New valuation assertion with a supersession link", "Updated state on the superseded assertion", "Serially numbered valuation correction notice" ], "preconditions": [ "The superseded assertion exists and its computational fields are immutable", "The issuer is authorised and the approver is independent of the consumer of the corrected value", "The correction reason maps to a governed reason code" ], "effects": [ "Appends a new assertion and marks the prior one superseded without mutating it; identifiers of superseded assertions are never reused", "Emits the correction notice; delivery to downstream consumers, audit-trail persistence and retention execution are performed by the referenced notification, audit and retention models", "Never rewrites, revises or re-publishes the source rate, which remains under the publisher's own revision regime" ], "source_refs": [ "SRC-028", "SRC-029", "SRC-023", "SRC-027" ] }, { "id": "money-govctl-fn-check-role-completeness", "name": "Check accountable role completeness", "description": "Compare the declared role assignments for a monetary assertion against the role set required by its governing profile and report missing or expired assignments.", "inputs": [ "monetary assertion reference", "declared role assignment set", "governing profile reference" ], "outputs": [ "role completeness report", "missing role list", "expired assignment list" ], "preconditions": [ "The assertion carries a host reference and a role on host", "A governing profile version is pinned or a default profile is declared" ], "effects": [ "Emits an advisory report only; assigns no permission, blocks no operation and creates no obligation" ], "source_refs": [ "SRC-040" ] }, { "id": "money-govctl-fn-check-duty-segregation", "name": "Check segregation of duties declarations", "description": "Test whether preparer, independent reviewer and approver references are distinct parties and, where they are not, whether a relief declaration with a compensating measure is present and unexpired.", "inputs": [ "preparer reference", "reviewer reference", "approver reference", "segregation relief declaration" ], "outputs": [ "segregation check result", "overlapping position list", "unmitigated overlap list" ], "preconditions": [ "Party references resolve to distinguishable identifiers", "Relief rules are declared with an effective interval" ], "effects": [ "Produces a declarative finding; does not decide whether the control is effective and does not stand in for audit testing" ], "source_refs": [ "SRC-040" ] }, { "id": "money-govctl-fn-resolve-effective-assertion", "name": "Resolve the effective monetary assertion", "description": "Given a host reference, a role on host and a point in time, return the assertion version whose effective interval covers that point, together with its status and any superseding version.", "inputs": [ "host reference", "role on host", "point in time" ], "outputs": [ "effective assertion version", "assertion status", "superseding version reference or none" ], "preconditions": [ "Effective intervals and recorded-at timestamps are present with explicit offsets", "At most one non-superseded version covers the requested point" ], "effects": [ "Read-only resolution; writes nothing and does not alter status" ], "source_refs": [ "SRC-027", "SRC-038" ] }, { "id": "money-govctl-fn-check-reference-pins", "name": "Check currency-list and policy pins", "description": "Verify that the currency code-list pin and policy version pins are present and resolvable, and flag a code that has become historic or been replaced relative to the pinned list.", "inputs": [ "currency code", "currency code-list pin", "policy version pin set" ], "outputs": [ "pin resolution report", "code status finding", "unpinned reference list" ], "preconditions": [ "Read access to the published code-list edition named in the pin", "Policy references expose a version label or a content digest" ], "effects": [ "Reports drift between pinned and current references; never amends the register and never changes the stored currency code" ], "source_refs": [ "SRC-001" ] }, { "id": "money-govctl-fn-verify-provenance-chain", "name": "Verify provenance chain completeness", "description": "Check that a derived monetary value carries an original value reference, a derivation activity, an applied rate with its reference instant and retrieval time, and an attributed agent, and report which links are absent.", "inputs": [ "derived value assertion", "lineage fields", "required lineage profile" ], "outputs": [ "provenance completeness report", "missing link list", "recomputability indicator" ], "preconditions": [ "The value is declared as derived rather than original", "Timestamps are expressed with explicit offsets" ], "effects": [ "Emits a completeness report; performs no market-data retrieval and does not re-derive the value" ], "source_refs": [ "SRC-034", "SRC-027", "SRC-023" ] }, { "id": "money-govctl-fn-verify-evidence-integrity", "name": "Verify evidence integrity against manifest", "description": "Recompute digests for referenced evidence items and compare them with the recorded integrity manifest, reporting mismatches, missing items and unrecorded additions.", "inputs": [ "evidence item set", "integrity manifest", "digest algorithm" ], "outputs": [ "integrity verification report", "mismatch list", "unverifiable item list" ], "preconditions": [ "Evidence items are readable at their recorded references", "The manifest records algorithm and computation time for each entry" ], "effects": [ "Reports discrepancies without remediating, quarantining or deleting evidence; does not constitute audit evidence of control operation" ], "source_refs": [ "SRC-038", "SRC-040" ] }, { "id": "money-govctl-fn-derive-access-labels", "name": "Derive published access attributes", "description": "Compute the object attribute set and declared scopes that an external decision point consumes, from sensitivity class, restriction basis, handling labels and access exception declarations.", "inputs": [ "sensitivity class", "restriction basis", "handling label set", "access exception declarations" ], "outputs": [ "published attribute set", "declared scope list", "projection constraint list" ], "preconditions": [ "A sensitivity class is declared or a default class is pinned by the governing profile" ], "effects": [ "Publishes attributes only; renders no permit or deny decision, enforces nothing and discharges no obligation" ], "source_refs": [ "SRC-035", "SRC-036" ] }, { "id": "money-govctl-fn-assess-disposition-readiness", "name": "Assess disposition readiness", "description": "Determine whether the retention period computed from the trigger event has elapsed, whether any legal hold is active, and whether the host record's period is longer, and report an eligibility outcome.", "inputs": [ "retention class", "retention trigger event and time", "legal hold flag", "host retention period" ], "outputs": [ "disposition readiness report", "eligible-from timestamp", "blocking reason list" ], "preconditions": [ "A retention class and trigger event are declared", "Hold status is current at evaluation time" ], "effects": [ "Advisory readiness assessment only; the records programme executes disposal, transfer and destruction and owns the disposition record" ], "source_refs": [ "SRC-037", "SRC-038" ] }, { "id": "money-govctl-fn-report-profile-conformance", "name": "Report profile conformance and mapping loss", "description": "Check mapping completeness against a named external representation and emit an alignment or conformance report listing mapped fields, unmapped fields and declared losses.", "inputs": [ "governing profile reference", "mapping table", "target representation version" ], "outputs": [ "conformance report", "unmapped field list", "declared loss list" ], "preconditions": [ "The target representation version is identified or a content digest is recorded", "Required checks for a conformance claim are declared" ], "effects": [ "Records an alignment by default and a conformance claim only where the declared checks pass and are evidenced; asserts nothing about the external system's behaviour" ], "source_refs": [ "SRC-032", "SRC-017", "SRC-039" ] }, { "id": "money-svcstate-fn-resolve-effective", "name": "Resolve effective monetary assertion version", "description": "Select exactly one version of a bound monetary assertion for a stated effective instant and observation cut-off, and return it verbatim with a reproducible selection trace.", "inputs": [ "Assertion identifier or host anchor with attribute path", "Requested effective instant", "Requested observation cut-off instant", "Interval boundary convention and tie-break key in force" ], "outputs": [ "Selected version identifier and validator, or an explicit none-applicable outcome", "Verbatim amount string, declared scale and referenced currency code", "Currency register list and status that applied at the effective instant", "Ordered selection trace and, on failure, a structured failure descriptor" ], "preconditions": [ "The assertion identifier or host anchor is syntactically resolvable", "Both instants are RFC 3339 values carrying seconds and an explicit offset or Z", "The version series is readable and its effective intervals are well formed" ], "effects": [ "Returns a declarative resolution result only", "Performs no write, no conversion, no rounding and no re-scaling", "Emits no audit entry; audit capture belongs to the external audit component" ], "source_refs": [ "SRC-001", "SRC-041", "SRC-027", "SRC-043", "SRC-044", "SRC-048" ] }, { "id": "money-svcstate-fn-check-bind-preconditions", "name": "Check binding and creation preconditions", "description": "Evaluate every precondition for creating a monetary assertion and binding it to a host anchor, including currency-register validity, scale consistency, anchor resolvability and idempotency key state, and emit the precondition report.", "inputs": [ "Proposed assertion payload in canonical form", "Host anchor reference and attribute path", "Idempotency key and prior-request state where supplied", "Applicable currency register lists and minor-unit reference values" ], "outputs": [ "Binding precondition and idempotency report with per-check verdicts and severities", "Aggregate accept or reject recommendation", "Computed request fingerprint", "Structured failure descriptor for each failing check" ], "preconditions": [ "The canonical form of the payload can be computed", "The currency register reference is resolvable for the effective instant", "The host anchor reference is well formed" ], "effects": [ "Produces a report; creates and persists nothing", "Does not reserve, lock or allocate any identifier in the host", "Makes no authorization decision and enforces no outcome" ], "source_refs": [ "SRC-001", "SRC-041", "SRC-043", "SRC-044", "SRC-046", "SRC-047" ] }, { "id": "money-svcstate-fn-plan-correction", "name": "Plan a correction by supersession", "description": "Compose a correction plan that names the version to be superseded and its validator, states the replacement values, closes the prior effective interval, and reports overlap and gap conditions across the version series.", "inputs": [ "Target assertion version identifier and the validator observed on the last read", "Proposed replacement amount, currency reference, scale and effective interval", "Correction reason code, justification and responsible agent reference", "Existing version series with its effective intervals" ], "outputs": [ "Monetary assertion correction plan", "Interval overlap and gap findings across the series", "Retroactivity flag and the required conditional predicate for submission", "Enumerated failure outcomes for a stale validator or an ill-formed interval" ], "preconditions": [ "The target version exists and is readable", "A validator for the target version has been supplied", "The proposed interval is well formed under the declared boundary convention" ], "effects": [ "Produces a proposal; applies nothing and mutates no stored version", "Never rewrites the superseded version or reuses its identifier", "Leaves acceptance, ordering and persistence entirely to the host" ], "source_refs": [ "SRC-034", "SRC-041", "SRC-043", "SRC-045", "SRC-047", "SRC-048" ] }, { "id": "money-svcstate-fn-compile-review-evidence", "name": "Compile review and approval evidence", "description": "Assemble the evidence set for a proposed monetary state change, verify evidence validity intervals, status and securing proofs, and report completeness with named gaps.", "inputs": [ "Reference to the precondition report or correction plan under review, pinned by digest", "Reviewer identity references and asserted mandate references", "Recorded review decisions and their instants", "Status or revocation references for each evidence item" ], "outputs": [ "Monetary change review record", "Per-item validity, status and integrity verification outcomes", "Completeness verdict listing every missing or stale item by name", "Structured failure descriptor where evidence cannot be verified" ], "preconditions": [ "The reviewed plan or report is retrievable and its digest can be recomputed", "Each evidence item exposes a validity interval or an explicit absence statement", "Status references, where present, are resolvable" ], "effects": [ "Produces a compiled evidence record only", "Does not approve, reject or enforce anything and issues no credential", "Does not operate a status list; revocation is owned by the issuing party" ], "source_refs": [ "SRC-037", "SRC-035", "SRC-045", "SRC-047" ] }, { "id": "money-svcstate-fn-report-eligibility", "name": "Report advisory eligibility for a monetary operation", "description": "Assemble the subject, object, operation and environment attributes for a requested read or change and emit a non-binding eligibility statement that names the external component holding decision authority.", "inputs": [ "Requested action and the target assertion version with its validator", "Subject attribute references supplied by the caller or an attribute source", "Object attributes of the assertion and its host anchor", "Environment attributes such as request instant and channel reference" ], "outputs": [ "Advisory eligibility verdict drawn from eligible, not-eligible, indeterminate or not-applicable", "The attribute set as supplied, with sources and observation instants", "Explicit disclaimer naming the external decision point as the holder of permit or deny", "Structured failure descriptor when required attributes cannot be resolved" ], "preconditions": [ "The target assertion version is identifiable", "The requested action is one of the operations defined by this model", "Attribute sources, where referenced, are resolvable or explicitly recorded as unavailable" ], "effects": [ "Emits an advisory statement that may be safely disregarded", "Renders no authorization decision and performs no enforcement", "Grants, denies and revokes nothing, and writes no access log" ], "source_refs": [ "SRC-035", "SRC-047", "SRC-036" ] }, { "id": "money-svcstate-fn-report-disposition-readiness", "name": "Report disposition readiness", "description": "Assess whether a monetary assertion is ready for removal by collecting holds in force, the referenced retention class, reference-integrity results and outstanding blockers, and emit the readiness report with proposed tombstone content.", "inputs": [ "Assertion identifier and its full version series", "Hold and freeze references applying to the assertion or its host", "Retention class reference and its owning authority", "Inbound reference inventory from the host and from prior versions" ], "outputs": [ "Disposition readiness report", "Blocker list with types, severities and external owners", "Proposed tombstone content excluding amount, currency and interval values", "Aggregate verdict of ready, blocked or indeterminate with a re-evaluation instant" ], "preconditions": [ "Hold and retention references are resolvable, or their unavailability is recorded as a blocker", "The version series and its invalidation markers are readable", "The inbound reference inventory can be enumerated or its incompleteness is declared" ], "effects": [ "Produces a readiness assessment only", "Deletes, destroys, transfers and anonymises nothing", "Never asserts that disposition occurred; execution belongs to the records authority and the host" ], "source_refs": [ "SRC-037", "SRC-042", "SRC-043", "SRC-047" ] }, { "id": "money-svcstate-fn-describe-failure", "name": "Describe an operation failure", "description": "Render any refusal, precondition failure, conflict or unresolvable reference from the operations above as a machine-identifiable failure descriptor with a resolvable type and a stable title.", "inputs": [ "Failing operation identifier and its inputs digest", "Failure category such as unknown identifier, unresolvable binding, stale validator, duplicate in flight, fingerprint mismatch, tombstoned, blocked by hold or unverifiable evidence", "Contextual references relevant to the failure", "Observation instant of the failure" ], "outputs": [ "Failure descriptor carrying a resolvable type identifier, stable title, status, instance and detail", "Extension members naming the target assertion version, validator and offending reference", "Remediation instruction where one is defined", "Correlation reference for reconciliation with the external audit entry" ], "preconditions": [ "The failure category is drawn from the model's published enumeration", "A resolvable type identifier exists for that category" ], "effects": [ "Produces a descriptor only and changes no state", "Does not suppress, retry or escalate the failing operation", "Writes no audit record; it emits a correlation reference for the audit component to use" ], "source_refs": [ "SRC-041", "SRC-043", "SRC-046", "SRC-047" ] }, { "id": "money-svccalc-fn-validate-monetary-value", "name": "Validate monetary value", "description": "Evaluate a monetary value for admissibility against a caller-pinned profile and a referenced currency register version, returning typed outcomes without altering the value.", "inputs": [ "monetary value with amount, currency identifier, declared scale, measurement basis and valuation instant", "validation profile reference and version", "currency register version reference" ], "outputs": [ "admissibility verdict", "ordered list of validation outcome codes with severity and attribute pointers" ], "preconditions": [ "Currency register version is resolvable by the caller", "Validation profile, if pinned, is resolvable and versioned", "Amount is presented as an exact decimal with a declared scale" ], "effects": [ "Emits a verdict and outcome codes only", "Performs no coercion, normalisation, persistence, posting or enforcement", "Does not resolve or amend the currency register itself" ], "source_refs": [ "SRC-001", "SRC-052", "SRC-027" ] }, { "id": "money-svccalc-fn-quantize-amount", "name": "Quantise amount", "description": "Round an exact amount to a target scale under a referenced rounding policy and report the signed residual and the resulting value interval.", "inputs": [ "exact decimal amount and currency identifier", "target scale or a rule for deriving it from the currency minor unit", "rounding policy profile reference and version" ], "outputs": [ "quantised amount with declared decimals", "signed residual", "implied value interval", "exactness indicator and precision-loss outcome code where applicable" ], "preconditions": [ "Amount is exact and admissible", "Rounding policy profile is resolvable and its version is pinned", "Target scale is either the register minor unit or a pinned deviation with a stated authority" ], "effects": [ "Returns a computed value and residual", "Never silently discards the residual: it is reported even when zero", "Performs no persistence or ledger allocation of the residual" ], "source_refs": [ "SRC-001", "SRC-026", "SRC-050", "SRC-051" ] }, { "id": "money-svccalc-fn-allocate-residual", "name": "Allocate quantisation residual", "description": "Distribute the residual arising when a quantised total is split into components, so that the quantised components sum exactly to the quantised total.", "inputs": [ "quantised total", "component weights or shares", "rounding policy profile reference including the allocation method" ], "outputs": [ "quantised component amounts", "allocation trace identifying which components absorbed residual units", "post-allocation sum check result" ], "preconditions": [ "All components share one currency and one target scale", "Allocation method is declared in the referenced policy profile", "Total is already quantised" ], "effects": [ "Returns component amounts whose sum equals the given total exactly", "Reports the allocation trace for reproduction", "Does not post, settle or persist the allocation" ], "source_refs": [ "SRC-049", "SRC-050", "SRC-051" ] }, { "id": "money-svccalc-fn-convert-value", "name": "Value or convert monetary value", "description": "Restate a monetary value in a target currency or under a target measurement basis using a rate binding supplied by the caller, emitting a complete derivation record.", "inputs": [ "source monetary value", "target currency identifier and target measurement basis", "rate binding with source reference, direction, reference instant, retrieval instant and any chain legs", "rounding policy profile reference", "reference-time selector and staleness threshold" ], "outputs": [ "derived monetary value carrying the original amount and currency", "derivation record", "derivation outcome codes" ], "preconditions": [ "Rate binding is supplied; this function never retrieves a rate", "Rate reference instant and retrieval instant are both present with explicit offsets", "Rate value is non-zero and the quotation direction is stated", "Any inverse or chained computation is permitted by the pinned policy" ], "effects": [ "Returns a derived value that never replaces or overwrites the original amount and currency", "Emits explicit outcomes for missing, stale, ambiguous or non-exchangeable rates, prohibited inverse, zero or non-positive rate and precision loss instead of substituting a fallback rate", "Performs no rate acquisition, accounting recognition, posting or persistence" ], "source_refs": [ "SRC-032", "SRC-033", "SRC-023", "SRC-012", "SRC-050", "SRC-027" ] }, { "id": "money-svccalc-fn-reconcile-values", "name": "Reconcile monetary values", "description": "Compare a set of monetary values against a stated total or against one another within a declared tolerance and report the verdict with attribution of any difference.", "inputs": [ "reconciliation set with member references, roles and signed weights", "reported total where applicable", "tolerance declaration and its basis", "rounding policy profile reference and derivation record references for restated members" ], "outputs": [ "reconciliation verdict", "signed difference with currency", "difference attribution", "reconciliation statement" ], "preconditions": [ "All members resolve to one common currency", "Measurement bases are compatible or their incompatibility is declared", "Declared decimals or value intervals are available for each member", "Tolerance is declared explicitly and not inferred silently" ], "effects": [ "Reports consistency, inconsistency or non-evaluability", "Never adjusts, plugs or writes back a difference", "Performs no posting, approval or enforcement of a corrective action" ], "source_refs": [ "SRC-049", "SRC-026", "SRC-032" ] }, { "id": "money-svccalc-fn-project-monetary-value", "name": "Project monetary value to target representation", "description": "Map a monetary value and its precision into a named target representation, declaring any scaling or rounding introduced by the projection.", "inputs": [ "monetary value with declared decimals and exactness indicator", "target representation identifier and version with its field mapping rules", "scale factor where presentation scaling is requested" ], "outputs": [ "projected value in the target representation", "projection manifest entry with lossiness and reconcilability indicators", "interoperability outcome codes for unmapped or narrowed constraints" ], "preconditions": [ "Target representation and version are resolvable", "Currency identifier is representable in the target representation", "Declared decimals are known for the source value" ], "effects": [ "Emits a projected value and a declaration of losses introduced", "Flags rather than silently truncates when the target permits fewer digits than the source declares", "Performs no transmission, publication, storage or disclosure authorisation" ], "source_refs": [ "SRC-026", "SRC-052", "SRC-010" ] }, { "id": "money-svccalc-fn-redact-monetary-value", "name": "Apply authorised redaction to a monetary projection", "description": "Apply an already-authorised disclosure-protection operation — suppression, banding, controlled rounding or interval publication — to a monetary projection and declare the resulting information loss.", "inputs": [ "monetary projection or set of projected values", "redaction directive naming the operation, the affected values and the secondary suppression set", "authorisation decision reference issued by an external authority" ], "outputs": [ "redacted projection", "updated lossiness and reconcilability declaration", "information-loss statement and redaction outcome codes" ], "preconditions": [ "An external authorisation decision reference is present; the function never decides authorisation", "The redaction directive names a defined protection operation", "Any secondary suppression required to protect a primary suppression is supplied in the directive" ], "effects": [ "Returns a degraded projection marked as lossy and, where applicable, non-reconcilable", "Never deletes or alters the underlying source value", "Performs no authorisation evaluation, enforcement or audit-trail writing" ], "source_refs": [ "SRC-053", "SRC-026" ] } ], "composition": [ { "target": "WM-ECO-004 (parent economic value model in the adopting registry)", "relation": "CHILD", "purpose": "Registers this mixin beneath the economic value parent so that monetary declarations inherit that parent's domain framing. Economic interpretation, valuation theory and economic-event semantics remain with the parent; this model contributes only the monetary field itself.", "required": true, "source_refs": [ "SRC-001" ] }, { "target": "ISO 4217 currency and funds code register (List One current, List Two registered funds, List Three historic) maintained by the ISO 4217 Maintenance Agency", "relation": "REFERENCE", "purpose": "Supplies currency code identity, class, status, published minor units and withdrawal periods. This model carries the code, the list, the pinned published edition and a snapshot digest; allocation, amendment, withdrawal and reinstatement of codes remain entirely with the Maintenance Agency.", "required": true, "source_refs": [ "SRC-001", "SRC-002", "SRC-003" ] }, { "target": "Host object model declaring a monetary value (price, fee, balance, budget line or equivalent)", "relation": "MIX-IN", "purpose": "Embeds the monetary declaration into a host record. The host owns record identity, record lifecycle, access classification and the business meaning of the value, including what a negative amount signifies; this model owns only the declaration's shape and internal integrity.", "required": true, "source_refs": [ "SRC-008", "SRC-010", "SRC-011" ] }, { "target": "IEEE 754-2019 decimal formats and the general decimal arithmetic number model", "relation": "ALIGN", "purpose": "Aligns the abstract representation of the amount to a sign, integer coefficient and exponent, and supports the rejection of binary floating point as canonical. Arithmetic operations, rounding-mode execution and exception signalling remain with the numeric runtime.", "required": false, "source_refs": [ "SRC-005", "SRC-006" ] }, { "target": "W3C XML Schema decimal datatype (value space, lexical and canonical forms, totalDigits and fractionDigits facets)", "relation": "ALIGN", "purpose": "Aligns the exact decimal value space, the canonical lexical form and the digit-bound facets used to constrain declared amounts. Schema validation execution and document processing remain with the consuming schema processor.", "required": false, "source_refs": [ "SRC-004" ] }, { "target": "ISO 20022 amount and currency data types (ActiveCurrencyAndAmount, ActiveOrHistoricCurrencyAndAmount and their currency attribute)", "relation": "ALIGN", "purpose": "Aligns the inseparable amount-plus-currency pairing and the separation of active from historic currency vocabularies for message projections. Message definition, payment instruction lifecycle and settlement processing are not owned here.", "required": false, "source_refs": [ "SRC-010" ] }, { "target": "Unicode CLDR locale currency display data (symbols, localized names, digits, rounding and cash rounding)", "relation": "REFERENCE", "purpose": "Supplies presentation labels and locale formatting behaviour when a value is rendered. This model carries only optional non-identifying labels with their locale tag; formatting rules, symbol assignment and cash-rounding data remain with the locale data authority.", "required": false, "source_refs": [ "SRC-007" ] }, { "target": "Absent-value reason vocabulary (published data-absent-reason code system or an equivalent declared by the adopting Dimension)", "relation": "REFERENCE", "purpose": "Supplies the codes that distinguish unknown, masked, not-applicable, unsupported and error absences so that absence is asserted rather than defaulted. Vocabulary maintenance, versioning and code definitions remain with the publishing terminology authority.", "required": false, "source_refs": [ "SRC-009" ] }, { "target": "Exchange-rate publication model (official reporting or reference rate series published by a treasury, central bank or market data authority)", "relation": "REFERENCE", "purpose": "Where a declared amount resulted from a conversion, this model carries the valuation date and a reference identifying the rate used. Rate publication, effective periods, amendment and supersession remain with the publisher and are never re-derived here.", "required": false, "source_refs": [ "SRC-012" ] }, { "target": "WM-ECO-004 — parent economic model", "relation": "CHILD", "purpose": "WM-XCT-032 is registered as a child of the parent economic model. The parent owns economic concepts such as price, cost, income and value; this mixin owns only the representation, precision, quantization and comparison contract for the monetary amount those concepts carry.", "required": true, "source_refs": [ "SRC-001", "SRC-010" ] }, { "target": "Adopting host model carrying a monetary value (Dimension-designated owner package)", "relation": "MIX-IN", "purpose": "Attaches amount, currency binding, precision declaration, quantization context and comparison preconditions to a host record. The host supplies business meaning, tolerance and materiality thresholds, and retains persistence, process and transaction lifecycle.", "required": true, "source_refs": [ "SRC-010", "SRC-019" ] }, { "target": "ISO 4217 currency and fund code register maintained by SIX", "relation": "REFERENCE", "purpose": "Carries the currency code, the minor-unit value and the pinned list or amendment version used for a precision decision. Code allocation, alteration and withdrawal, and the register's own publication lifecycle, remain with the maintenance agency and are not reproduced here.", "required": true, "source_refs": [ "SRC-001" ] }, { "target": "IEEE 754-2019 and the Decimal Arithmetic Specification", "relation": "ALIGN", "purpose": "Aligns rounding-mode names, quantize semantics and exception-signal names with decimal arithmetic. The alignment is nominal: this model declares which mode and which signals apply, claims no conformance for any runtime, and does not own arithmetic execution.", "required": false, "source_refs": [ "SRC-006", "SRC-005", "SRC-013" ] }, { "target": "XBRL 2.1 accuracy attributes for numeric facts", "relation": "ALIGN", "purpose": "Maps the declared accuracy of a monetary value onto reporting-instance accuracy attributes for interchange, recording the mapping's lossy directions. Taxonomy design, instance construction and reporting validation remain owned by the reporting framework.", "required": false, "source_refs": [ "SRC-017" ] }, { "target": "National cash-rounding instruments issued by public authorities", "relation": "REFERENCE", "purpose": "References the applicable cash-rounding instrument — increment, direction, channel scope and voluntary or mandatory status — as the authority for an increment-based quantization rule. Rule-making, jurisdictional reach and enforcement stay with the issuing authority.", "required": false, "source_refs": [ "SRC-014", "SRC-015", "SRC-016" ] }, { "target": "Exchange and reporting profiles that fix decimal limits (Peppol BIS Billing, ISO 20022 message profiles)", "relation": "ALIGN", "purpose": "Aligns declared scale, digit capacity and rounding-adjustment elements with named exchange profiles so a value can be projected into them. Profile conformance, validation artefacts and message lifecycle remain owned by those profiles.", "required": false, "source_refs": [ "SRC-010", "SRC-018" ] }, { "target": "Adopting Dimension governance, retention and audit facility", "relation": "REFERENCE", "purpose": "Supplies the owner package, retention schedule, access decisions and audit persistence for records produced under this mixin. This model states what must be reconstructible and refers execution, enforcement and audit-trail retention to that facility; it does not own or perform them.", "required": true, "source_refs": [ "SRC-018", "SRC-019" ] }, { "target": "WM-ECO-004 (parent economic value model)", "relation": "CHILD", "purpose": "Registers WM-XCT-032 beneath the economic value parent. The parent owns the general notion of economic value and its role in economic reasoning; this model owns only the expression of that value as an exact amount in a designated currency with a valuation, quotation and conversion context. Measurement bases such as fair value and historical cost are defined by external standards and are referenced here, never redefined.", "required": true, "source_refs": [ "SRC-020", "SRC-021" ] }, { "target": "Market data and exchange-rate publication model (rate series owner)", "relation": "REFERENCE", "purpose": "Carries a resolvable rate reference, series and observation key, effective interval, publication instant and retrieval capture, plus the subject-specific staleness tolerance and session binding. The series lifecycle, determination procedure, publication calendar, suspension and revision policy remain wholly with the publishing model.", "required": true, "source_refs": [ "SRC-023", "SRC-024", "SRC-029" ] }, { "target": "Benchmark administration model under Regulation (EU) 2016/1011", "relation": "ALIGN", "purpose": "Aligns the rate source, methodology reference and input-data notion with benchmark administrator concepts so that an externally administered rate is recognisable as such. Administrator governance, the oversight function, input-data monitoring, methodology-change consultation and benchmark cessation stay with the administrator and its supervisor.", "required": false, "source_refs": [ "SRC-028", "SRC-030" ] }, { "target": "ISO 4217 currency, funds and historic code register (SIX Maintenance Agency)", "relation": "ALIGN", "purpose": "Binds currency designation, numeric code and minor unit to the authoritative register, and pins the register version applicable at the valuation instant so that amendments with later effective dates do not retroactively change historical amounts. This model neither mints nor retires currency codes.", "required": true, "source_refs": [ "SRC-001" ] }, { "target": "XBRL monetary fact model (unit measure and declared accuracy)", "relation": "ALIGN", "purpose": "Aligns declared precision with the accuracy attributes and the requirement that a monetary fact carry a currency unit without embedded scaling, so that an amount exported to a reporting instance keeps its exactness or rounding claim. Taxonomy binding, instance assembly and report generation belong to the reporting model.", "required": false, "source_refs": [ "SRC-025", "SRC-026" ] }, { "target": "Accounting model implementing IAS 21 foreign currency translation", "relation": "ALIGN", "purpose": "Maps amount roles to functional and presentation currency concepts and to the requirement that translation uses a rate tied to a specific date. Determining the functional currency, recognising exchange differences, applying averaging expedients and preparing disclosures remain in the accounting model.", "required": false, "source_refs": [ "SRC-020", "SRC-022" ] }, { "target": "Price, tariff, payment, settlement and trade execution models", "relation": "MIX-IN", "purpose": "This model is embedded by commercial and settlement models to supply amount, currency, precision and valuation context on their monetary fields. Those models retain the instruction, execution, settlement and reconciliation lifecycles and the instrument or contract terms.", "required": false, "source_refs": [ "SRC-031", "SRC-030" ] }, { "target": "Temporal instant mixin (RFC 3339 timestamps)", "relation": "MIX-IN", "purpose": "Supplies the canonical timestamp form for valuation, rate effective, publication, observation, retrieval and ingestion instants, including the requirement for seconds and an explicit offset and the prohibition on unqualified local time.", "required": true, "source_refs": [ "SRC-027" ] }, { "target": "Adopting Dimension audit-trail and records-retention model", "relation": "REFERENCE", "purpose": "Correction notices and evidence packages are handed to this model by reference. Audit persistence, immutability enforcement, evidentiary weighting, retention period setting and disposition execution are owned there; WM-XCT-032 emits payloads and records outcome references only.", "required": true, "source_refs": [ "SRC-028", "SRC-029" ] }, { "target": "Fee, spread, mark-up and tax component models", "relation": "REFERENCE", "purpose": "Charge components affecting a monetary value are referenced by identifier and component type so they remain visible without being absorbed into the exchange rate or the converted amount. Their calculation, rates, bases and lifecycles belong to those models.", "required": false, "source_refs": [ "SRC-030", "SRC-028" ] }, { "target": "WM-ECO-004 (parent economic value model)", "relation": "CHILD", "purpose": "Places the monetary binding within the parent's treatment of economic value and reporting context; the parent frames what is being valued, this mixin governs the monetary assertion attached to a host.", "required": true, "source_refs": [ "SRC-032", "SRC-033" ] }, { "target": "Host record model of the adopting Dimension (entity, event or document that carries the amount)", "relation": "MIX-IN", "purpose": "Supplies the host reference, role on host and context period on which the mixin's weak identity depends; the host retains its own lifecycle and identity.", "required": true, "source_refs": [ "SRC-017" ] }, { "target": "ISO 4217 currency code register maintained by the ISO 4217 Maintenance Agency", "relation": "REFERENCE", "purpose": "Resolves the alphabetic code, numeric code, minor unit and code status, and supplies the edition and amendment number to pin. Code creation, replacement and withdrawal remain with the register.", "required": true, "source_refs": [ "SRC-001" ] }, { "target": "External authorization component (policy decision and enforcement points)", "relation": "REFERENCE", "purpose": "Consumes the published sensitivity, restriction and scope attributes and renders and enforces access decisions. This model never evaluates a request or discharges an obligation.", "required": true, "source_refs": [ "SRC-035", "SRC-036" ] }, { "target": "Records management and disposition authority (retention schedules and disposal execution)", "relation": "REFERENCE", "purpose": "Owns the retention schedule, disposal execution, transfer and destruction evidence; this model declares class, trigger, hold and tombstone content and assesses readiness only.", "required": true, "source_refs": [ "SRC-037", "SRC-038" ] }, { "target": "W3C PROV provenance model", "relation": "ALIGN", "purpose": "Shapes original-versus-derived lineage, agent attribution, delegation and revision relations to standard provenance terms without adopting provenance graph storage, query or inference.", "required": false, "source_refs": [ "SRC-034" ] }, { "target": "Financial reporting framework model (IAS 21 translation, IFRS 13 fair value measurement)", "relation": "ALIGN", "purpose": "Aligns currency roles, spot and closing rate use and measurement basis vocabulary; measurement methodology, hierarchy classification and disclosure obligations remain with the framework.", "required": false, "source_refs": [ "SRC-032", "SRC-033" ] }, { "target": "XBRL business reporting projection (monetary fact, unit and context)", "relation": "ALIGN", "purpose": "Maps the assertion to a fact bound to a concept, context and unit with a declared accuracy attribute, as one projection of the semantics held here.", "required": false, "source_refs": [ "SRC-017" ] }, { "target": "Exchange-rate publication and market-data source registry", "relation": "REFERENCE", "purpose": "Identifies the rate publisher, series, reference instant and any publisher-stated usage limitation. Rate determination, publication schedule and republication remain with the publisher.", "required": false, "source_refs": [ "SRC-023" ] }, { "target": "Jurisdictional tax and statutory conversion rule model", "relation": "REFERENCE", "purpose": "Supplies the mandated conversion rule and any notification duty for a given jurisdiction and transaction class; tax liability determination and filing remain outside this model.", "required": false, "source_refs": [ "SRC-039" ] }, { "target": "External audit and assurance record model", "relation": "REFERENCE", "purpose": "Carries a citation and a scope limitation for an audit record touching the value or its controls; evidence sufficiency, testing and conclusions remain with the auditor.", "required": false, "source_refs": [ "SRC-040" ] }, { "target": "Temporal expression profile for internet timestamps", "relation": "ALIGN", "purpose": "Fixes how valuation instants, rate reference instants, retrieval times and recorded-at times are written, including the distinct meaning of an unknown local offset.", "required": false, "source_refs": [ "SRC-027" ] }, { "target": "WM-ECO-004 (parent economics model)", "relation": "CHILD", "purpose": "WM-XCT-032 sits beneath the economics parent. The parent owns economic value, markets and exchange concepts; this model contributes only the concrete bound monetary assertion and its declarative operation contract, and must not restate the parent's economic semantics.", "required": true, "source_refs": [ "SRC-020" ] }, { "target": "Host entity or event model that carries the monetary assertion (adopting-Dimension model)", "relation": "MIX-IN", "purpose": "The assertion is mixed into a host record at a named attribute path. The host owns its own identifiers, its own lifecycle, persistence and enforcement; this model supplies the anchor, the version series, the operation preconditions and the reports. No host lifecycle state is defined here.", "required": true, "source_refs": [ "SRC-043", "SRC-037" ] }, { "target": "ISO 4217 currency and funds register (ISO 4217 Maintenance Agency lists One, Two and Three)", "relation": "REFERENCE", "purpose": "Alphabetic codes, numeric codes and minor units are referenced from the register together with the list and status that applied at the effective instant. Allocation, amendment, redenomination and withdrawal of codes remain wholly with the maintenance agency.", "required": true, "source_refs": [ "SRC-001", "SRC-044" ] }, { "target": "External authorization component (policy decision point and policy enforcement point)", "relation": "REFERENCE", "purpose": "This model supplies attributes and emits advisory eligibility statements. The decision point renders the authoritative Permit, Deny, Indeterminate or NotApplicable outcome and the enforcement point enforces it, including any obligations. No evaluation, decision or enforcement semantics are owned locally.", "required": true, "source_refs": [ "SRC-035", "SRC-036" ] }, { "target": "Records authority, retention schedule and disposition programme", "relation": "REFERENCE", "purpose": "Retention classes, disposition authorities, holds and physical destruction are authored, decided and executed by the records authority. This model carries the references and reports readiness only; it never schedules, approves or performs disposition.", "required": true, "source_refs": [ "SRC-037", "SRC-042" ] }, { "target": "Audit trail and event log model", "relation": "REFERENCE", "purpose": "Operation attempts and outcomes are captured, secured and retained by the audit component. This model emits correlation references so an outcome can be reconciled with an audit entry, and owns no audit-trail production, retention or tamper-evidence semantics.", "required": false, "source_refs": [ "SRC-037", "SRC-035" ] }, { "target": "Foreign-exchange rate observation and conversion model", "relation": "REFERENCE", "purpose": "Rate feeds, rate selection, spot and closing rate policy and conversion arithmetic live in that model. A converted amount is a separate monetary assertion produced there and referenced here; no operation in this model derives one.", "required": false, "source_refs": [ "SRC-020" ] }, { "target": "W3C PROV-O provenance vocabulary", "relation": "ALIGN", "purpose": "Supersession, derivation, responsible agent, generation instant and invalidation instant are expressed as mappings to PROV terms. The alignment is a mapping claim for interoperability; no conformance to PROV-O is asserted and no PROV processing behaviour is adopted.", "required": false, "source_refs": [ "SRC-034" ] }, { "target": "Monetary payload types: HL7 FHIR Money and XBRL monetary items with ISO 4217 unit measures", "relation": "ALIGN", "purpose": "Amount plus currency reference with preserved precision is mapped to established payload types for exchange, including the instant-versus-duration period distinction. Field-level differences, especially permitted fraction digits, are recorded as conflicts rather than reconciled by assumption.", "required": false, "source_refs": [ "SRC-044", "SRC-017" ] }, { "target": "W3C Verifiable Credentials Data Model 2.0", "relation": "ALIGN", "purpose": "Review and approval evidence may be carried as verifiable credentials with a validity interval, a status reference and a securing proof. Issuance, verification, presentation and status-list operation stay with the issuer, holder and verifier; this model only compiles and checks what it is given.", "required": false, "source_refs": [ "SRC-045" ] }, { "target": "WM-ECO-004", "relation": "CHILD", "purpose": "Registered parent economic model that supplies the surrounding economic-value context; WM-XCT-032 contributes only the monetary value structure and its calculation, reconciliation and projection semantics.", "required": true, "source_refs": [ "SRC-032" ] }, { "target": "Host entity, event or agreement models that carry monetary attributes", "relation": "MIX-IN", "purpose": "Attach amount, currency, measurement basis, valuation instant, declared precision and derivation lineage to any host record without the host redefining monetary arithmetic.", "required": true, "source_refs": [ "SRC-032", "SRC-052" ] }, { "target": "Currency register maintained under ISO 4217 by its maintenance agency", "relation": "ALIGN", "purpose": "Resolve currency identifiers, numeric codes, minor units and code status against the governing register version; the register's assignment, amendment and withdrawal lifecycle stays with the maintenance agency.", "required": true, "source_refs": [ "SRC-001" ] }, { "target": "External exchange-rate source or market data service", "relation": "REFERENCE", "purpose": "Consume a rate binding as an input and record its source, publication reference, reference instant and retrieval instant; rate acquisition, publication schedules, suspension of pairs and fitness-for-purpose statements remain owned by the publisher.", "required": true, "source_refs": [ "SRC-023", "SRC-012" ] }, { "target": "Accounting policy, recognition and ledger posting model", "relation": "REFERENCE", "purpose": "Carry the measurement basis and reference-time selector that an accounting policy dictates, and hand computed values back for recognition; selection of the applicable rate policy, recognition of exchange differences and posting remain external.", "required": false, "source_refs": [ "SRC-032", "SRC-033" ] }, { "target": "Payment message and scheme profile models", "relation": "ALIGN", "purpose": "Constrain validation profiles to scheme and message-level currency and digit limits when a caller pins one, and preserve amount and currency meaning end to end across message projections.", "required": false, "source_refs": [ "SRC-052", "SRC-010" ] }, { "target": "Business reporting fact model (XBRL / Open Information Model)", "relation": "ALIGN", "purpose": "Reuse declared-decimals, value-interval and calculation-consistency semantics for quantisation and reconciliation tolerance; taxonomies, contexts, dimensional models and filing rules remain in the reporting framework.", "required": false, "source_refs": [ "SRC-049", "SRC-026" ] }, { "target": "Authorisation, disclosure-control and policy decision service", "relation": "REFERENCE", "purpose": "Receive an authorisation decision reference and a redaction directive as inputs to a redaction operation; evaluation, enforcement and the audit trail of the decision are owned entirely by that service.", "required": true, "source_refs": [ "SRC-053" ] }, { "target": "Temporal representation model based on RFC 3339", "relation": "ALIGN", "purpose": "Express valuation instant, rate reference instant, retrieval instant and projection instant with seconds and an explicit offset or Z, so that staleness and supersession are computable.", "required": true, "source_refs": [ "SRC-027" ] }, { "target": "Currency-regime and jurisdictional conversion rule sets", "relation": "EXTEND", "purpose": "Specialise only the monetary computation parameters that a jurisdictional regime fixes — significant figures retained in a rate, permissibility of inverse rates, mandatory pivot currency, intermediate rounding depth and final rounding rule — without duplicating the regime's own legal authority, applicability or enforcement machinery.", "required": false, "source_refs": [ "SRC-050", "SRC-051" ] }, { "target": "Records retention, storage and audit record systems", "relation": "REFERENCE", "purpose": "Delegate persistence, retention scheduling, legal hold, erasure execution and audit-trail construction for monetary records and derivation lineage; this model defines disposition semantics only.", "required": false, "source_refs": [ "SRC-053" ] } ], "serviceLayers": { "dimension": { "owner_package_requirements": [ "The adopting Dimension names an owner package that holds the model specification, the pinned currency code-list edition reference and the governing rounding, rate-source and profile policy references, and publishes their version labels.", "The owner package declares which external components own authorization decisions, records disposition and audit records, and records those bindings as resolvable references before the model is used in production.", "The owner package publishes the identifier scheme used for Dimension-assigned surrogate identifiers and the party register that role references resolve against, and states that role assertions are advisory.", "The owner package records the regional and accounting profiles in force, including competing rate-source mandates, and the precedence rule or the decision to carry dual values." ], "namespace_guidance": "Local identifiers are lower-kebab-case and prefixed for this model; they must not embed dates, amounts or currency codes. External vocabularies are referenced by their own governed identifiers - ISO 4217 codes by the maintenance agency's code with the list edition pinned, provenance terms by the PROV namespace IRI - and are never re-minted in a local namespace. Where a Dimension must mint an identifier, it uses a UUID or ULID under a namespace it controls and records the minting reason.", "registry_links": [ "Vercy registry entry vr.wm-xct-032 (model WM-XCT-032), parent WM-ECO-004", "ISO 4217 Maintenance Agency currency code lists (current, fund and historic) as the referenced register", "W3C PROV namespace http://www.w3.org/ns/prov# as the provenance alignment target" ] }, "canon_and_patch": { "canonicalization_rules": [ "Timestamps are canonicalised to RFC 3339 with seconds present and an explicit numeric offset or Z; -00:00 is preserved as meaning an unknown local offset and is never rewritten to Z.", "Currency codes are canonicalised to the uppercase alphabetic code with the numeric code carried alongside, and the code-list edition and amendment that resolved them are pinned rather than assumed current.", "References are canonicalised to their authoritative identifier form; display names, labels and human-readable notes are excluded from any canonical form used for digests.", "Digest inputs are canonicalised by sorting object keys, omitting absent optional fields and excluding the digest field itself, so that recomputation is deterministic across projections." ], "patch_rules": [ "A change to amount, currency, applied rate, measurement basis or effective interval is a superseding version that cites the prior version and a change authority; where non-rewriteable preservation or an audit-trail alternative applies, in-place overwriting is prohibited.", "A change to advisory metadata (handling labels, non-normative notes, mapping documentation) may be applied in place, and the recorded-at timestamp is updated while the effective interval is left unchanged.", "A patch must not alter a pinned code-list edition, amendment number or policy version retroactively; re-pinning is recorded as a new assertion version with its own recorded-at time.", "A patch that removes a field required by a governing profile is rejected and reported rather than applied silently." ], "compatibility_rules": [ "Adding an optional field, a new sensitivity class value or a new mapping entry is backward compatible; consumers ignore unknown optional fields.", "Narrowing a cardinality, making an optional field required, or changing the meaning of a status or class code is breaking and requires a new model version and a re-issued profile conformance statement.", "Historic currency codes remain valid in stored assertions after the register withdraws them; consumers must resolve them against the historic list rather than reject them.", "A conformance claim against an external representation is invalidated when that representation's version changes and reverts to an alignment until the declared checks are re-run." ] }, "artifact_rules": { "identity_priority": [ "Authoritative master-system identifier: the identifier issued by the system of record that owns the artifact or the host record it belongs to (for example the accounting or document system's record key), used whenever it exists and is stable.", "Governed global identifier or IRI: an identifier from a governed external scheme, such as a maintenance-agency currency code with its pinned list edition or a namespace IRI, used where the artifact references externally governed content.", "UUID or ULID assigned by the adopting Dimension, minted only when neither of the above exists, with the minting reason recorded.", "Composite weak key of host reference, role on host, currency and valuation context, used for resolution and collision detection but never as a substitute for a stable identifier when one is available." ], "timestamp_rule": "All time values are written in RFC 3339 form with seconds always present and an explicit numeric offset or Z; -00:00 is reserved for an unknown local offset and is not equivalent to Z. Event time and observation or ingestion time are recorded separately whenever they can differ: the valuation or measurement instant and the rate reference instant are event times, while the rate retrieval time, the recorded-at time and any digest computation time are observation or ingestion times. A date without a time of day may be recorded only where the governing profile defines the value as a whole-day event, and a date is never used as an identifier.", "serial_naming_rule": "Serial artifacts are named by their stable parent key followed by a zero-padded monotonic sequence number that carries no date, amount or currency component - revision notes as assertion key plus revision sequence, and rate evidence snapshots as rate source and series plus the rate reference instant plus a capture sequence for repeated captures. Sequence numbers are never reused after supersession or disposal.", "integrity_rule": "Every artifact records a digest value, the algorithm used and the digest computation time in an integrity manifest, computed over the canonical form. Corrections are additive superseding versions rather than edits, so that a modification history remains reconstructable where non-rewriteable preservation or an audit-trail alternative is required. Verification reports discrepancies only; it never repairs, quarantines or deletes evidence, and it is not a substitute for audit testing." }, "policies": [ "Role, authority and segregation declarations are advisory metadata. An external authorization component owns every allow or deny decision, and no monetary value is presumed to have an owner or a valuation authority unless one is declared.", "Lifecycle verbs in this model act on the monetary binding on its host. They never create or imply a lifecycle for a currency, a price, a rate feed, a transaction, an account or an instrument; where such a change is the cause, an external record is cited instead.", "Rate and valuation inputs are recorded with their source, reference instant, retrieval time and any publisher-stated usage limitation; a rate published for information purposes only is never presented as a transaction rate.", "Pinned references govern interpretation. A stored assertion is read against the code-list edition and policy versions pinned at assertion time, not against the current ones.", "Conformance to an external standard is claimed only where declared checks have been run and evidenced; otherwise the relationship is recorded as an alignment, and known conflicts are recorded rather than reconciled by assumption." ], "crud": { "read": [ "Reads resolve the effective assertion for a host reference, role and point in time, returning the version whose effective interval covers that point together with its status and any superseding version.", "Reads return pinned code-list and policy versions alongside the value so that a consumer can interpret a historic currency code or a superseded rounding policy correctly.", "Reads of restricted values return the published attribute set and any declared projection constraint; the decision to release, mask or band the value is made and applied by the external authorization component.", "Reads never mutate status, hold flags or retention state, and read access to preserved records must remain available to an entitled examiner for the duration of the retention period." ], "create": [ "Creation requires a resolvable host reference and a role on host; a monetary assertion is never created without a host.", "Creation records the recorded-at time and, where the value is derived, the original value reference, derivation activity, applied rate, rate reference instant and rate retrieval time.", "Creation pins the currency code-list edition and amendment and the governing rounding, rate-source and profile policy versions, or records a content digest where the source publishes no version.", "Creation may record advisory role assignments and a sensitivity class; absence of an owner or approver is represented explicitly rather than defaulted." ], "update": [ "A change to amount, currency, applied rate, measurement basis or effective interval creates a superseding version citing the prior version, a change authority and, where applicable, the external record that triggered it.", "In-place modification is prohibited wherever non-rewriteable preservation or an audit-trail alternative applies; the modification history must remain reconstructable.", "Advisory metadata may be updated in place with a refreshed recorded-at timestamp, leaving the effective interval and pins untouched.", "An update that would violate a pinned policy version or remove a profile-required field is rejected and reported, not silently coerced." ], "delete": [ "Records of this model are never hard-deleted while their declared retention period is unexpired or a legal hold flag is active; the hold suppresses disposition until the issuing authority releases it.", "On expiry of the retention period with no active hold, the record becomes disposition-eligible and is reduced to a tombstone that preserves the assertion key, host reference, currency code, retention class, disposition time and disposition record reference, while the amount, lineage detail and evidence content are irreversibly removed.", "The tombstone retains the original assertion key so that inbound references resolve to a disposed marker rather than dangling; keys are never reused.", "Execution of disposal, transfer and physical destruction, and the disposition record evidencing it, are owned by the adopting Dimension's records management authority under its retention schedule and by the applicable preservation rule for financial records. This model only assesses readiness, declares the tombstone content and stores the reference to the externally produced disposition record.", "Where the host record's retention period is longer than the assertion's, the longer period governs and the record remains undeletable until the reconciled eligible-from time." ] }, "roles": [ { "name": "Accountable value owner", "responsibilities": [ "Is recorded as accountable for a monetary value on its host and for the correctness of its declared context", "Confirms the governing profile and the sensitivity class applied to the value", "Requests correction through the declared change authority rather than editing a preserved value" ] }, { "name": "Currency-data steward", "responsibilities": [ "Maintains the pinned currency code-list edition and amendment reference and the handling of historic, fund and replaced codes", "Maintains the rounding and minor-unit policy reference and its version label", "Reports drift between pinned and currently published register content without amending stored assertions retroactively" ] }, { "name": "Valuation authority", "responsibilities": [ "Names the rate source and measurement basis permitted for a class of values under a profile", "Records the fallback basis when a mandated source publishes nothing or a currency is not exchangeable", "Records the publisher-stated usage limitations that must travel with a cited rate" ] }, { "name": "Preparer", "responsibilities": [ "Creates the monetary assertion with its host binding, valuation context, lineage fields and pins", "Attaches the supporting evidence items and their digests", "Declares explicitly where required context is unavailable rather than defaulting it" ] }, { "name": "Independent reviewer", "responsibilities": [ "Checks the assertion against its governing profile, pins and lineage completeness", "Records the review outcome as an observable state and the evidence relied on, distinguishing automated checks from re-performance", "Records a segregation relief declaration and compensating measure where positions overlap" ] }, { "name": "Approver", "responsibilities": [ "Records approval of the assertion or of a superseding correction under a cited change authority", "Confirms that the correction mode complies with the applicable preservation rule", "Does not act as preparer for the same assertion unless an unexpired relief declaration is recorded" ] }, { "name": "Records custodian", "responsibilities": [ "Maintains the retention class, trigger and hold flags for monetary context records and their evidence", "Consumes disposition readiness reports and links the externally produced disposition record", "Ensures preserved records remain accessible to entitled examiners for the retention period" ] }, { "name": "Access administrator", "responsibilities": [ "Maintains the mapping from sensitivity class and restriction basis to the attributes published for the external decision point", "Registers time-bounded access exception declarations and their bases", "Confirms that this model publishes attributes only and holds no decision or enforcement logic" ] } ], "access": { "default_rule": "Deny by default at every scope. This model publishes object attributes, declared scopes and projection constraints; an external policy decision point evaluates each request against subject, resource, action and environment attributes, and an enforcement point applies the result and discharges any obligation. Nothing recorded here grants access by itself.", "scopes": [ "bundle", "layer", "finding", "artifact" ], "exceptions": [ "Regulatory or supervisory examination access to preserved monetary records and their evidence, recorded as a time-bounded exception citing the preservation rule that requires ready accessibility.", "External auditor access to evidence items and approval records for a defined engagement period, recorded with the engagement reference and an explicit non-transfer condition.", "Counterparty-facing disclosure of a commercially restricted amount only where the restricting agreement permits it, with the permitted recipient class and interval recorded.", "Break-glass access under a named authority, recorded with the requesting party, the justification, the interval and a mandatory post-hoc review reference.", "Artifact-scope exception for a tombstone record, which remains resolvable after disposal because it carries no amount or evidence content." ], "audit_requirements": [ "Each declared access exception records its basis reference, beneficiary class, interval and the party that registered it, so that the declaration itself is reviewable.", "Attribute changes affecting release - sensitivity class, restriction basis, handling labels - are versioned with a recorded-at timestamp and the party that made them.", "This model records references to externally held access and audit logs and their scope limitations; it does not store, evaluate or interpret the access log or the audit trail, which remain owned by the authorization and audit components.", "Where an access exception expires or is released, the release time is recorded rather than the declaration being deleted, so the historical basis stays reconstructable." ] }, "agents_bootstrap": { "filename": "AGENTS.md", "required_fields": [ "Name", "Type", "Specification URL", "Storage type URL", "Interface URL", "Processes URL", "Registry ID and Model ID", "Owner package and designated maintainer", "Pinned currency code-list edition and governing policy versions", "Externally owned components: authorization decision point, records disposition authority, audit record source", "Boundary statement: advisory roles only, no enforcement, no external lifecycle ownership" ], "read_order": [ "Read AGENTS.md first to obtain Name, Type, Specification URL, Storage type URL, Interface URL and Processes URL before any other artifact.", "Read the Specification URL to load the model boundary, in-scope and out-of-scope statements and the boundary notes, so that target-owned concepts are not re-implemented locally.", "Read the Storage type URL to learn how the format-neutral structure is projected into the concrete store, then the Interface URL for the read, create, update and delete contracts including the tombstone rule.", "Read the Processes URL for the declarative check functions, then resolve the pinned currency code-list edition and policy versions before creating or interpreting any monetary assertion.", "Resolve the externally owned components last and confirm their bindings; if the authorization decision point or the records disposition authority cannot be resolved, operate in read-only mode and report the gap." ] } }, "coverage": { "claim": "This audit reviewed all 11 bundles, 25 layers, 47 findings, 199 questions, 26 declared artifacts and 37 functions in the single Claude pass against its own scope statement, boundary notes, known_omissions, conflicts and adversarial_checks logs. It verifies internal consistency and self-declared boundaries only; it cannot confirm live source URLs or current version/edition labels, and it does not substitute for the still-pending second-provider or registry-level boundary review.", "confidence": "medium", "checklist": [ { "dimension": "identity", "status": "covered", "notes": "Currency identity is a code plus catalogue plus pinned edition plus list designator; alphabetic and numeric forms are both carried, and symbols are excluded from identity on explicit CLDR evidence. Declaration identity derives from the host record and field path, with a Dimension-assigned identifier only as a last resort." }, { "dimension": "relationships", "status": "gap", "notes": "Nine candidate composition links describe the parent model, the code register, the host mix-in, decimal and schema alignments, message-type alignment, locale display, absent-value vocabulary and exchange-rate publication, each stating what remains with the target. The frozen relationship contract is empty, so these links remain pending registry confirmation." }, { "dimension": "lifecycle", "status": "covered", "notes": "Lifecycle verbs act only on the monetary binding on its host - asserted, revised, superseded, withdrawn - with correction-by-supersession where non-rewriteable preservation applies. No lifecycle is created for a currency, rate feed, transaction, account or instrument." }, { "dimension": "temporal", "status": "covered", "notes": "Effective interval, valuation and rate reference instants (event time) are separated from rate retrieval, recorded-at and digest computation times (observation time); all use RFC 3339 with seconds and an explicit offset, and -00:00 retains its distinct meaning." }, { "dimension": "provenance", "status": "covered", "notes": "Original-versus-derived lineage, derivation activity, applied rate and instant, agent attribution and delegation are aligned to PROV terms; a recomputation tolerance is declared." }, { "dimension": "ownership", "status": "covered", "notes": "Accountable value owner, currency-data steward and valuation authority are advisory and optional; no source supports a universal owner, so absence is represented explicitly rather than defaulted." }, { "dimension": "access", "status": "covered", "notes": "Attribute-only contribution with deny-by-default, four declared scopes and time-bounded exceptions; decision, enforcement and obligation discharge are explicitly outside the model." }, { "dimension": "retention and deletion", "status": "covered", "notes": "Retention class and trigger, legal-hold suppression, disposition readiness assessment, tombstone content and key preservation are declared; disposal execution and the disposition record are owned by the records authority and the applicable preservation rule." }, { "dimension": "interoperability", "status": "covered", "notes": "Profile declaration, mapping entries labelled alignment or conformance, declared losses, historic-code interpretation and precedence between competing rate mandates are all represented." }, { "dimension": "precision and scale", "status": "covered", "notes": "Declared scale and precision are separated from observed digits and from exponent normalisation. Minor units are version-pinned currency properties covering zero, two, three and four digits and the not-applicable case; profile digit limits are recorded as a separate constraint." }, { "dimension": "rounding determinism", "status": "covered", "notes": "Mode, target exponent or increment, direction, tie handling, stage and channel scope are all required before a rule is interpretable; no default is supplied and an unnamed rule is a failure." }, { "dimension": "comparison and aggregation safety", "status": "covered", "notes": "A compatibility gate over currency, valuation and rounding context precedes equality, ordering and aggregation; equality semantics must be selected explicitly; implicit conversion and re-quantization are prohibited and refusals are typed." }, { "dimension": "failure signalling", "status": "covered", "notes": "Named arithmetic conditions including invalid-operation, overflow, underflow, inexact, rounded, clamped and subnormal are surfaced by name; silent truncation, clamping and binary-float coercion are prohibited." }, { "dimension": "uncertainty and bounded values", "status": "gap", "notes": "Bounded and estimated monetary values are declared with lower and upper bounds and a derivation method, but no primary monetary-specific source was found that governs how such bounds are derived or propagated. The structure records the bounds without prescribing an uncertainty framework." }, { "dimension": "conversion derivation", "status": "covered", "notes": "Direct, inverse, cross and triangulated methods with an ordered chain, pivot currencies, per-step rounding permissions and an explicit conversion equation." }, { "dimension": "measurement basis", "status": "covered", "notes": "Basis code, defining authority reference, designating authority and market, session or scenario reference are carried; the technique itself, its inputs and its hierarchy remain with the valuation model." }, { "dimension": "quality and status", "status": "covered", "notes": "Provisional, final, estimated and stale statuses, staleness tolerance with a named owner, exchangeability status and estimated-rate indicator, and a disputed state on failed recomputation." }, { "dimension": "integrity and security", "status": "covered", "notes": "Content digests over canonical serialisations bind the reproduction inputs to the stored result. Transport and at-rest protection are storage-projection concerns and are deliberately left to the projection and the adopting Dimension." }, { "dimension": "authority", "status": "covered", "notes": "Separate authority declarations for amount correction, rate-source selection and rounding-policy change, distinguishing statutory mandate from entity policy, with a fallback path when a mandated source is unavailable." }, { "dimension": "segregation of duties", "status": "covered", "notes": "Preparer, reviewer and approver distinctness is tested declaratively with an explicit relief-and-compensating-measure path, reflecting that smaller entities may be unable to segregate duties." }, { "dimension": "evidence integrity", "status": "covered", "notes": "Digest, algorithm and computation time per evidence item, a manifest, defect and interested-party flags, publisher usage limitations, and audit references carried with an explicit non-assertion statement." }, { "dimension": "confidentiality and commercial restriction", "status": "covered", "notes": "Sensitivity class, restriction basis, handling labels and projection constraints are declared as object attributes; whether a monetary value constitutes personal data is left to a referenced privacy model." }, { "dimension": "concurrency and idempotency", "status": "covered", "notes": "Strong validators with a required conditional predicate, a Dimension-fixed stale-validator outcome, and an idempotency key with published scope and expiry, fingerprint comparison, replay of the first outcome, a conflict outcome for in-flight duplicates and an unprocessable outcome for fingerprint mismatch." }, { "dimension": "failure semantics", "status": "covered", "notes": "A dedicated function renders every refusal as a machine-identifiable descriptor with a resolvable type, stable title, status, instance and extension members naming the target version and offending reference, plus a correlation reference for the audit component." }, { "dimension": "arithmetic reproducibility", "status": "covered", "notes": "Exact decimal representation, retained rate significant figures, declared multiply-versus-divide operation, chain legs and quantisation order together make any derived value recomputable from its record." }, { "dimension": "outcome and exception taxonomy", "status": "covered", "notes": "Missing, stale, ambiguous and non-exchangeable rates, unsupported currency or code status, prohibited or invalid inverse, zero or non-positive rate, precision loss, out-of-tolerance reconciliation and lossy or suppressed export are all typed outcomes with severity and blocking indicators." }, { "dimension": "disclosure and redaction", "status": "covered", "notes": "Suppression, secondary suppression, controlled and random rounding and interval publication are modelled as declared operations applied only under an external authorisation reference, with an information-loss statement and a reconcilability indicator." }, { "dimension": "non-ISO-4217 units of account", "status": "gap", "notes": "Crypto-assets, central bank digital currency units, loyalty points and commodity units of account lack a governing identifier register equivalent to ISO 4217; the model can carry them only via an explicitly named alternative register, which is not specified here." }, { "dimension": "security", "status": "not-applicable", "notes": "Cryptographic protection, transport security and key management belong to the storage and interface projections and to the adopting Dimension's security model; this model contributes only the content hash used for integrity of its own artifacts." }, { "dimension": "spatial", "status": "not-applicable", "notes": "Deliberately excluded. A currency code does not encode country, jurisdiction or legal-tender territory, and the catalogue's country-name column is descriptive rather than a jurisdiction assertion; any geographic fact must come from a model that owns it." } ], "known_omissions": [ "The normative clause text of ISO 4217:2015 is behind a paywall; the structure rests on the Maintenance Agency's published machine-readable lists and public pages rather than on quoted clauses.", "The clause text of IEEE 754-2019 is behind a paywall; only its published title, date and scope statement are relied on, with the publicly readable general decimal arithmetic model supplying the number model itself.", "List Two, the fund codes registered with the agency, is published in a word-processing format and was not parsed in this pass, so registered fund-code specifics are thinner than those for the current and historic lists.", "Digital-token and crypto-asset unit identity registers were not examined; non-ISO units are handled only through the generic mechanism of a declared alternative catalogue.", "Jurisdiction-specific cash-rounding legislation was not surveyed; cash rounding is treated as locale and jurisdiction data owned elsewhere.", "Unbounded and half-open monetary intervals are supported only through endpoint presence and inclusivity flags; no richer interval algebra was derived from sources.", "No source was found that fixes a single maximum digit count for monetary amounts across domains, so digit bounds are left to the host or profile.", "Indexed units of account and similar non-cash instruments are acknowledged only through the observation that the register assigns them codes and minor units; their revaluation semantics are not modelled here.", "Historic non-decimal currency subdivisions are noted as a limit case, but no primary source governing their arithmetic was located within the evidence used.", "Crypto-assets and other units outside the currency register are excluded; the sources used offer no maintenance-agency equivalent for their precision metadata.", "The judgement of when a rounding difference stops being a residual and becomes an error is not modelled; the endorsed sources define materiality but set no monetary threshold.", "The known-relation ledger for WM-XCT-032 is empty, so every composition link recorded here is a candidate requiring registry confirmation rather than an established contract.", "No primary source was located that prescribes a universal allocation algorithm; the model requires the rule to be named and versioned but deliberately does not rank pro-rata against largest-remainder or sequential allocation.", "Cash-rounding evidence covers only two jurisdictions; no attempt is made to enumerate every national increment, direction or mandate.", "ISO 20022 CurrencyExchange element definitions (SourceCurrency, TargetCurrency, UnitCurrency, ExchangeRate, QuotationDate, ContractIdentification) and the currency-and-amount data types could not be retrieved from the ISO 20022 repository during this research; the alignment to payment-message currency exchange components is left as a gap and no clause is claimed.", "The IOSCO Principles for Financial Benchmarks could not be retrieved (HTTP 403), so benchmark governance alignment rests on Regulation (EU) 2016/1011 and the FX Global Code alone; non-EU benchmark record-keeping expectations are therefore under-evidenced.", "Digital assets, stablecoins and other units of account outside the ISO 4217 register are not addressed; a separate unit-of-account register and a distinct exchangeability model would be required.", "Historic minor-unit changes, redenominations and non-decimal currencies are handled only by pinning the register version applicable at the valuation instant; no historic minor-unit table is modelled here.", "Inflation-adjusted, index-linked and hyperinflationary restatement contexts are not modelled; they would need a restatement basis and an index reference beyond the current basis vocabulary.", "Interval, range or probabilistic valuations with confidence bounds are not represented; the structure assumes a point value with declared accuracy.", "Period-average and closing-rate expedients are represented only as rate types and series variations; the conditions under which an entity may use them belong to the accounting model and are not evidenced here.", "Forward, swap and option-implied rates are referenced only as rate types; forward points, tenor and settlement conventions belong to the instrument and trade models.", "The ISO 20022 repository could not be retrieved during this research; its ActiveCurrencyAndAmount constraints (total and fraction digits, currency attribute) are recorded as an unverified alignment and must be validated before any payments-message mapping is claimed.", "ISO 4217:2015 and ISO 15489-1:2016 texts are behind paywalls and were not retrieved; currency code semantics were grounded in the maintenance agency's published lists and records-lifecycle structure in the NARA requirements instead.", "US GAAP ASC 830 was not consulted, so the model records no evidence about its differences from IAS 21 on translation and remeasurement.", "Hyperinflationary-economy restatement (IAS 29) and its interaction with valuation-date semantics are not represented.", "Benchmark administration governance, such as the EU Benchmarks Regulation, was not verified; rate-source governance is treated only as a reference and a selection basis.", "Non-ISO-4217 units of account - crypto-assets, loyalty points, vouchers, commodity-denominated units - are unresolved; the code-list pin assumes an ISO 4217 code space.", "No cryptographic non-repudiation scheme (signature or trusted timestamping profile) is specified for approvals; only digest-based integrity is declared.", "No local migration procedure for a currency redenomination or withdrawal that occurs while an effective interval is still open; the amendment record is referenced but the treatment of the straddling interval is undecided.", "No rule for amounts denominated in a currency that lacks exchangeability, where an operational read must return the asserted value while accounting practice may require a different measurement.", "Multi-currency composite assertions such as baskets and dual-currency instruments are not modelled; each currency is treated as a separate bound assertion and their mutual constraints are not expressed.", "Cryptoassets and other units outside the ISO 4217 register have no register binding, so the currency-membership precondition cannot be evaluated for them.", "No Dimension-wide default for sub-minor-unit scales such as unit pricing; the scale is declared per assertion with a reason, which permits inconsistent declarations across hosts.", "The concurrency validator format is delegated to the host projection, so cross-host correction plans cannot always be compared or replayed.", "Bulk operations — resolving or correcting many assertions atomically — are not specified; the contract addresses one assertion at a time.", "Negative amounts, zero and signed-zero conventions are not constrained here; sign meaning is left to the host attribute path.", "Hyperinflationary economy restatement and the interaction between restatement and translation are not modelled.", "Interest, discounting, day-count conventions and present-value computation are excluded even though they produce monetary values.", "Multi-currency netting, offsetting and settlement-risk computations are excluded.", "Bid/ask/mid rate selection, spreads and dealer margin are not modelled as first-class parameters; they are treated as attributes of an externally supplied rate binding.", "Historical redenomination factors for currencies replaced at a fixed ratio are referenced only through the register's successor code, not modelled as a conversion regime in their own right.", "The precise ISO 20022 amount digit constraints could not be verified from a machine-extractable primary source at access time, so no specific total-digit or fraction-digit limit is asserted as normative here.", "Tax and customs valuation rate mandates, which frequently differ from both accounting and reporting rates, are not enumerated." ], "conflicts": [ "A widely used web vocabulary explicitly permits non-ISO currency identifiers such as cryptocurrency tickers and local exchange trading system names, while financial-messaging and clinical monetary datatypes bind currency to ISO 4217; this model resolves the conflict by requiring the catalogue to be declared rather than assumed.", "Unicode CLDR states that its currency set deliberately diverges from ISO 4217, adding codes in widespread use and omitting some official ones, so CLDR membership is not evidence of ISO 4217 membership.", "The ISO 4217 lists publish no applicable minor unit for precious metals, funds, testing and no-currency codes, while financial-message amount types constrain fraction digits by default; scale must therefore be declared explicitly and not inferred from the code.", "CLDR cash digits and cash rounding differ from catalogue minor units, so no single decimal count is simultaneously authoritative for storage and for cash handling.", "Historic withdrawal dates are published at month granularity or as month ranges, conflicting with the expectation that every recorded time is an RFC 3339 instant.", "A public-authority reporting-rate list identifies currencies by country and currency description rather than by ISO code, showing that authoritative currency identity is catalogue-relative and that cross-register matching requires an explicit mapping.", "Statutory euro-conversion rounding requires exact half-way results to be rounded up, whereas decimal arithmetic and much accounting practice default to half-even. The model therefore refuses to nominate a global default and requires the tie rule to be named per context.", "Cash-rounding regimes quantize the total after tax to a five-cent increment while the same transaction settles to the cent electronically, so one underlying total legitimately yields two different payable amounts and a single canonical rounded amount does not exist.", "Exchange profiles impose decimal limits that may be narrower or wider than the currency minor unit — for example two-decimal document amounts alongside unit prices with no decimal restriction, and an amount capacity of eighteen total and five fraction digits. Profile limits and currency minor units are independent constraints and can disagree.", "Reporting accuracy is expressed with mutually exclusive decimal-place and significant-figure attributes, which does not map cleanly onto a single declared scale; the mapping is lossy in at least one direction and must be recorded as such.", "The Canadian guidance fixes the increment and the cash-only scope but expresses direction as a fairness and transparency principle, while the Irish guidance fixes the endings explicitly. Direction is therefore not derivable from the increment alone and must be carried on the rule record.", "The endorsed materiality definition consulted has since been consolidated into a later adoption regulation; the definition text is stable but the citation of record moves, so the model pins the instrument version rather than the concept.", "Quotation direction conflicts between authoritative publishers: the ECB publishes all reference rates as EUR 1 = x foreign currency units, while the Federal Reserve H.10 publishes noon buying rates in New York for cable transfers payable in the listed currencies. Storing either as 'the rate' without explicit base, quote and direction produces silent inversion errors, which is why the published direction is canonical and inversion is a flagged derived field.", "Revision-regime conflict: the Federal Reserve states that past H.10 releases are not revised and may not reflect subsequent revisions, whereas administrators under Regulation (EU) 2016/1011 operate methodology-change consultation and cessation procedures. A single provisional/final flag cannot represent both regimes, so the status code is qualified by the source identifier and its own regime.", "Fitness-for-purpose conflict: the ECB states that its reference rates are published for information purposes only and that use for transaction purposes is strongly discouraged, yet adopting systems routinely use such rates for settlement conversion. The model records the source's stated restriction and surfaces it, but cannot prevent misuse, and this is a live governance risk rather than a solved one.", "Precision conflict: XBRL guidance treats decimals='INF' as the correct expression of an exact monetary amount and warns that decimals='2' implies rounding, whereas many ledgers store amounts at the ISO 4217 minor unit and treat that storage as exact. The declared accuracy field must therefore distinguish exactness from rounding rather than record a decimal count alone.", "Estimation conflict: IAS 21 as amended requires an estimated spot rate when a currency is not exchangeable but deliberately does not prescribe an estimation technique, so two standard-compliant asserters can record different rates for the same currency and instant. The model records the estimation approach reference and the estimated flag but cannot adjudicate between them.", "Suspension conflict: the ECB suspended EUR/RUB reference rates from 1 March 2022 because it could not set a representative rate. A valuation requiring that pair after the suspension has no observable authoritative source, so a source-availability gap must be representable rather than silently filled by a stale or substituted rate.", "The ECB publishes euro reference rates for information purposes only and strongly discourages transaction use, while the VAT Directive permits the latest published ECB rate for converting a taxable amount. A rate can therefore be legally mandated in one context and disclaimed by its publisher in another; the limitation note must travel with the value and must not be generalised into permission.", "IAS 21 requires translation at the spot rate at the transaction date for the functional currency, while VAT Article 91 allows a Member State market rate, the ECB rate or customs-value rules. One economic event can carry two differently converted mandated amounts; the model records both with their profiles rather than reconciling them.", "The ISO 4217 minor unit is a code-list attribute, not a rounding mandate. Statutory or contractual rounding may differ, so rounding is expressed as a pinned policy reference and never inferred from the minor unit.", "A monetary fact identified only by concept, context and unit conflicts with master-data practice that expects a stable standalone identifier. This is resolved as weak host-dependent identity with conditional surrogates, which will break systems that assume a global monetary-value key.", "Non-rewriteable preservation or audit-trail requirements for financial records conflict with in-place correction patterns common in operational systems; the model forces additive supersession, which increases storage and complicates naive last-write-wins synchronisation.", "PCAOB expectations for segregated authorization, review and approval conflict with the practical staffing of smaller entities, so the model must permit an explicit relief declaration rather than assume full segregation.", "Precision authority: the currency register fixes a minor unit per currency while payment and reporting payloads permit greater fraction digits, and one prominent payload type treats represented decimal precision as itself significant. Both are recorded; the declared scale governs locally and the minor unit is carried as a reference value.", "Conditional-request semantics permit either a conflict or a precondition-failure outcome for a stale validator, and a widely used precedent returns either. The contract requires the adopting Dimension to fix one and publish it, since callers cannot branch reliably otherwise.", "The idempotency key mechanism is an expired Internet-Draft, not a normative standard. Its conflict and unprocessable outcomes are adopted as a documented convention and explicitly not claimed as conformance.", "Records-management practice differs on whether a superseded version is itself a record with its own retention trigger or merely a prior state of one record. The question is unresolved and produces an indeterminate readiness verdict with a blocker rather than a default.", "Accounting standards require a foreign-currency transaction to be translated at the spot rate for the transaction date, while this contract forbids derivation in the read path. The two are reconciled by treating a translated figure as a separate referenced assertion, which some reporting pipelines will find surprising.", "Provenance vocabularies distinguish revision of the same entity from derivation of a new one, while records systems often model both as versions of one record. The relation type is recorded explicitly so consumers can choose their interpretation.", "EU law prohibits deriving an inverse rate for euro conversion, while the ECB publishes reference rates only with the euro as base currency; systems needing a non-euro base pair must either use a different source or accept a computation the euro regime forbids in its own scope. The model therefore makes inverse permissibility an explicit pinned parameter rather than a default.", "IAS 21 requires the spot rate at the transaction date, whereas the U.S. Treasury regime mandates a single published rate for the reporting date and the ensuing three months, with amendments only when rates move by 10% or more. The same underlying transaction can legitimately carry different converted values under the two regimes.", "XBRL 2.1 calculation checking effectively requires reported rounded figures to add up exactly, whereas Calculations 1.1 defines consistency by overlap of rounding intervals. A reconciliation verdict is therefore only meaningful once the tolerance basis is declared.", "ISO 4217 minor units differ from the digit allowances of message profiles: a scheme profile may restrict a currency to two fractional digits while a message datatype allows more and the register defines a different minor unit for other currencies. Validation must be profile-pinned rather than register-only.", "IAS 21 provides for estimating a rate when a currency is not exchangeable, which conflicts operationally with regimes that require an officially published rate; the model reports non-exchangeability as an outcome and refuses to substitute an estimate on its own authority." ], "regional_assumptions": [ "The catalogue edition observed carries a published-edition marker of 2026-01-01 and already reflects a euro adoption effective that date; every adopter must pin its own edition rather than inherit this observation.", "Minor-unit values published by the catalogue are catalogue facts about code structure, not statements about cash denominations circulating in any jurisdiction.", "Legal-tender status, exchange controls and exchangeability are jurisdictional and time-varying, and are never inferred from a code or from the catalogue's country-name column.", "Locale formatting, including decimal separator, grouping and symbol placement, varies by locale and forms no part of monetary identity or comparison.", "Community, complementary and digital-asset units require an explicitly declared alternative catalogue; treating their tickers as ISO codes would be an error.", "Cash-rounding evidence is drawn from euro-area and Canadian practice; other jurisdictions use different increments, directions and channel scopes, and some mandate rather than permit rounding.", "The six-significant-figure conversion factor and triangulation rules are specific to the euro introduction and must not be generalised to arbitrary currency conversion.", "Currency minor units reflect the maintenance agency's published list at a point in time; amendment activity around a euro adoption illustrates that a pin can go stale within a single reporting period.", "Reporting accuracy attributes and e-invoicing decimal limits are drawn from one reporting language and one European e-invoicing profile; national filing formats may impose incompatible digit rules.", "Materiality framing follows the endorsed international accounting definition; jurisdictions applying other frameworks may set thresholds on a different basis.", "Publication semantics are drawn from euro-area practice (concertation around 14:10 CET, publication around 16:00 CET on working days except TARGET closing days) and United States practice (H.10 country data updated Mondays at 4:15 p.m.); other central banks publish on different sessions, conventions and calendars.", "Benchmark governance references are EU-specific (Regulation (EU) 2016/1011); equivalent regimes elsewhere differ in scope, administrator obligations and supervisory reach, so the administrator reference must not be assumed to imply the EU obligation set.", "An IFRS basis vocabulary is assumed for functional and presentation currency and for translation dates; jurisdictions applying national GAAP may use different role definitions and translation-date requirements.", "Market calendars determine when no rate is published; a no-rate-available condition is calendar- and jurisdiction-dependent and cannot be inferred from a generic weekday rule.", "The ISO 4217 register changes by dated amendment, including national euro adoptions with stated effective dates; the applicable register version is both region- and date-dependent and must be pinned per assertion.", "Currency-pair convention evidence draws on BIS survey practice, in which both sides of a transaction are counted and the US dollar appears on one side of the large majority of trades; conventions in less liquid pairs may be locally determined.", "EU rate-source rules are treated as one profile among several: Member States may mandate the most representative market rate, permit the latest published ECB rate subject to notification, or apply customs-value rules for defined categories.", "US broker-dealer preservation periods and non-rewriteable or audit-trail requirements are treated as a jurisdiction-specific profile, not as a universal retention rule; other jurisdictions impose different periods.", "The NARA electronic records lifecycle structure is used as a general lifecycle reference; it is a US federal programme requirement and is not binding outside that context.", "IFRS is assumed only where a profile declares it; local GAAP profiles may assign different currency roles, rate bases and disclosure duties.", "Currency code lists change by published amendment, so any assumption that a stored code is currently valid is jurisdiction- and time-dependent and must be resolved against the pinned edition.", "No single global tax or accounting profile is assumed; precedence between competing profiles is an explicit decision recorded per value.", "Hold and freeze semantics are drawn from a United States federal records authority: a freeze suspends scheduled disposition and is lifted only by a formal written request. Other jurisdictions use different instruments; the contract carries the reference and the effect, never the procedure.", "Functional and presentation currency concepts follow IFRS. Jurisdictions applying other accounting frameworks may define the reporting currency, and therefore the meaning of the effective instant for reporting, differently.", "Minor-unit expectations assume the ISO 4217 register. Jurisdictions with statutory cash-rounding rules, or with a legal tender whose practical smallest unit differs from the registered minor unit, must declare the rounding rule on the assertion.", "Presentation conventions — decimal separator, digit grouping, symbol placement, negative-amount notation — are treated as locale projections and are excluded from the canonical form, which assumes a point decimal separator and no grouping.", "The assumption that a records authority exists and can be referenced holds in regulated and public-sector settings; in lightly governed settings the retention-class reference will be absent and readiness will be indeterminate by design.", "The six-significant-figure, no-inverse-rate and triangulation rules are specific to euro conversion under EU law and apply only to the euro and the national currency units it replaced; they are not a global default.", "ECB reference rates are euro-based, published on TARGET working days only, explicitly discouraged for transaction purposes, and include suspended pairs; any deployment relying on them inherits those limits.", "Treasury Reporting Rates of Exchange bind U.S. federal agencies and carry enumerated exceptions for collections, refunds and inter-currency conversions; they are not a general-purpose commercial rate source.", "The 2026 transition of Bulgaria to the euro illustrates that register status and fixed conversion ratios are time-dependent; any validation must cite the register version in force at the valuation instant.", "Statistical disclosure control terminology and thresholds follow European practice; other statistical authorities use different dominance rules and rounding bases." ], "adversarial_checks": [ "Searched for any normative source that treats a currency symbol or localized name as an identifier; the opposite was found, with an explicit warning that the same symbol may denote several currencies, so symbols are modelled strictly as labels.", "Tested whether a currency code alone determines the amount's scale; the register publishes no applicable minor unit for precious metals, registered funds, the testing code and the no-currency code, so a host-declared scale is required and a default of two fraction digits was rejected.", "Tested whether binary floating point could be defended as the canonical representation; the exact decimal value space and the sign, coefficient and exponent number model rule it out, and no consulted source endorses it for monetary storage.", "Tested whether zero could stand for an absent value; a published absent-reason vocabulary distinguishing unknown, masked, not-applicable, unsupported and error shows absence is a separate assertion, so the zero substitution was rejected.", "Tested whether this mixin could own currency code allocation, withdrawal or reinstatement; the Maintenance Agency holds that authority, so succession and redenomination are carried as references and no local lifecycle, evaluation or enforcement machinery was modelled.", "Tested whether comparison implies conversion capability; comparison was deliberately restricted to exact same-currency representations with an externally supplied compatibility assertion, and rate lookup, conversion and rate supersession were left with the rate publisher.", "Tested whether the country column in the code list could support jurisdiction inference; it names entities associated with an entry rather than asserting legal-tender territory, so the spatial dimension was marked not applicable rather than quietly reused.", "Tested whether an artifact could be justified for the amount itself; the amount has no identity or retention life independent of its host record, so only the externally published catalogue snapshot and amendment notice were declared as artifacts.", "Two-decimal assumption: the structure was tested against zero-, three- and four-decimal currencies and against codes with no applicable minor unit. No data element or rule assumes a scale of two; minor units are read from a pinned list rather than inferred from a field width.", "Single-rounding-rule assumption: the statutory half-up tie rule and the half-even accounting default were placed side by side. The model refuses to nominate a winner and makes an unnamed rule an explicit failure rather than a defaulted success.", "Non-decimal increment: five-cent cash quantization was used to confirm that quantization is expressed as increment-or-exponent rather than as a digit count alone, and that channel scope is part of the rule rather than an afterthought.", "Boundary creep into evaluation and audit: every bundle, layer, finding and function was re-read against the boundary notes and composition rationales. Quantization, allocation and comparison return values and signals to the caller and explicitly do not persist results, enforce policy or write audit entries; audit reconstructability is stated as a requirement placed on the adopting Dimension's facility, not as a capability owned here.", "Boundary creep into rate sourcing: the comparison function was constrained to refuse incompatible values rather than convert them, and the conversion-precision question records declared factor and intermediate precision only. No element sources, selects, publishes or applies an exchange rate.", "Registry duplication: the model was checked against the parent economic model's concern. Price, cost and valuation meaning were left with the parent and only representation, precision, quantization and comparison retained here.", "Unsupported structure rejected: a proposed layer for rounding-error analytics and drift reporting was dropped because no primary source in scope governs it and it would have imported host analytics and monitoring into a mixin.", "Identifier hygiene: every local identifier was checked for uniqueness across bundles, layers, findings, questions, data elements, artefacts and functions, and for the absence of any date-like component; version tokens and effective periods are held as attributes only.", "Tested whether this model should own an exchange-rate time series, a rate determination methodology or a benchmark calculation. Rejected: ECB, Federal Reserve and Regulation (EU) 2016/1011 evidence all place determination, publication, methodology change and cessation with the source or administrator, so the model carries a reference, a binding and subject-specific parameters only.", "Tested whether a rate value, currency pair or valuation date could serve as the identity of an amount. Rejected: the identity priority requires an authoritative master-system identifier, and a rate is a mutable context attribute whose correction must not change the identity of either amount.", "Tested whether a valuation date alone is sufficient temporal context. Rejected: RFC 3339 requires seconds and an explicit offset for an instant, ECB rates are pinned to a concertation time and a separate publication time, and a single date cannot separate event, valuation, effective, publication and ingestion time.", "Tested whether a single amount field with an attached rate is sufficient. Rejected: the IAS 21 functional-versus-presentation distinction and the requirement that the original remain retrievable force role-tagged sibling amounts with an explicit derivation link.", "Tested whether holding reproducibility evidence makes this model the audit trail. Rejected: evidence packages carry references, parameters and a digest, while audit persistence, immutability enforcement, evidentiary weighting and retention execution remain with the referenced audit and retention models, and the correction function emits payloads rather than writing the audit record.", "Searched for a counterexample in which a converted amount may legitimately replace the original. None found in the cited standards; even the lack-of-exchangeability case requires the estimated rate and its basis to be disclosed alongside the original rather than in place of it.", "Tested whether any cited primary source sanctions folding a fee, spread or mark-up into a recorded exchange rate. No such support was found, so charge components remain separately referenced and an unexplained recorded-versus-source rate divergence is a validation failure.", "Tested whether the rate-selection function could be presented as a policy engine. Rejected: the function applies caller-supplied criteria deterministically and records the outcome; policy authoring, approval, runtime evaluation and enforcement are left to the adopting Dimension's policy model.", "Tested whether the model could set retention periods for its own records. Rejected: retention periods derive from the adopting Dimension's records policy and, where applicable, a reporting regime; the model carries a retention class, emits a disposition request and records the outcome reference only.", "Searched for a normative requirement that every monetary value has an owner or a valuation authority. None was found, so role assignment is modelled as optional advisory metadata with explicit absence, rather than as a mandatory field that would fabricate accountability.", "Tested whether the ISO 4217 minor unit can be presented as a rounding rule. The maintenance agency publishes it as a code-list attribute alongside alphabetic and numeric codes, so a rounding mandate was rejected and rounding was demoted to a pinned external policy reference.", "Tested whether this model may hold audit conclusions or an audit trail. Audit evidence sufficiency and conclusions rest with the auditor and access logs rest with the authorization component, so only references and explicit non-assertion statements are carried; no audit-trail storage, evaluation or retention semantics are modelled locally.", "Checked whether ECB reference rates could be treated as authoritative transaction rates. The publisher discourages transaction use, so rate-source declarations were required to carry a usage limitation instead of an implied permission.", "Attempted to justify a local disposition workflow with destruction steps. The records lifecycle places disposal execution with the records programme, so only a readiness assessment, a hold declaration and a tombstone for this model's own records were retained.", "Attempted to justify local access-decision logic so that restricted amounts could be masked by the model. Decision and enforcement are separated from attribute publication in both the access-control standard and the ABAC guide, so the model publishes attributes and declared projection constraints only and never records that masking occurred.", "Tested whether a valuation date could serve as an identifier for repeated valuations of the same host amount. It cannot discriminate two valuations at the same instant from different sources, so identity was defined over host reference, role, currency and valuation context with a conditional surrogate.", "Reviewed every bundle, layer, finding and function against each composition rationale for target-owned concepts. Rate determination, register amendment, measurement methodology, payment and posting, authorization evaluation, disposal execution and audit-trail semantics were all pushed to out-of-scope entries, boundary notes or reference links rather than modelled here.", "Ownership probe: does any function persist, decide, enforce, destroy or produce an audit entry? Every function's effects list denies all five explicitly, and the delete rules name the external owner of each. The failure-description function emits a correlation reference rather than an audit record precisely so that referencing the audit component does not become owning it.", "Lifecycle-creep probe: does any node define states for a currency, price, transaction, account, rate feed or instrument? No. States apply only to the assertion's version series, and currency withdrawal is read from the register as a status flag rather than modelled as a local transition.", "Derivation probe: does any read or report compute a converted, rounded or re-scaled amount? No. The read finding forbids it, the policies restate it, and conversion is assigned to an external model by composition link. This is the check most likely to be violated by an implementation under pressure to be convenient.", "Identity probe: does any identifier embed a date, amount or currency? No. Serial names use a monotonic per-series sequence, artifacts carry instants as content, and identifier reuse after tombstoning is barred.", "Evidence probe: is any structural node asserted without primary support? Each bundle, layer, finding and function cites live primary sources. The idempotency convention is explicitly downgraded to a non-normative draft, and precision and jurisdictional questions are recorded as gaps rather than presented as settled.", "Falsifiability probe: could an implementer disprove the read contract? Yes — the boundary convention, tie-break key, none-applicable outcome and forbidden derivations are stated concretely enough that two implementations returning different versions for the same as-of pair constitute a demonstrable defect.", "Substitution probe: could a readiness report be mistaken for a disposition certificate? The delete rules and the artifact description both state it is never evidence that destruction occurred, and the tombstone excludes monetary content so that a surviving marker cannot be misread as a retained amount.", "Checked every function against the ownership contract: none acquires a rate, moves money, posts to a ledger, persists a record, authorises disclosure, enforces a policy or writes an audit trail. The redaction function was specifically constrained to require an externally issued authorisation decision reference and to perform no evaluation of it.", "Searched for counterexamples to a universal two-decimal assumption and found zero-decimal and three-decimal currencies in the register, a five-fraction-digit allowance in message datatypes and a two-decimal scheme restriction. The model therefore treats target scale as a pinned parameter with an explicit deviation authority rather than deriving it silently from the minor unit.", "Tested whether the attractive shortcut of deriving an inverse rate could be presented as canonical; it could not, because EU law prohibits it within its scope while the only euro-base public source makes it operationally tempting. The conflict is recorded and the behaviour is made an explicit parameter with an emitted outcome when prohibited.", "Tested whether a single tolerance constant could be presented as canonical for reconciliation; it could not, because interval-based and exact-sum consistency definitions coexist in the same standards family. Tolerance is therefore always declared with its basis, and a reconciliation without a declared basis is non-evaluable.", "Checked whether the model was quietly claiming ownership of evidence and audit semantics through its validation output; it was, so the validation finding was reduced to inline transient results with the durable evidence record explicitly assigned to the external audit and records systems.", "Checked whether redaction could be mistaken for deletion and closed the gap by stating that suppression never destroys the source value and that destruction requests are routed to the owning storage system." ] }, "researchAdjudication": { "providerMode": "single-provider-waiver", "activeProviders": [ "claude" ], "waivedProviders": [ "grok" ], "providerPolicy": { "contract_version": "1.0.0", "mode": "single-provider-waiver", "effective_at": "2026-08-29T09:06:27Z", "scope": "Queued subject-model research from WM-XCT-013 onward", "active_providers": [ "claude" ], "waived_providers": [ { "provider": "grok", "authorized_by": "repository owner", "authorized_at": "2026-08-29T09:06:27Z", "reason": "The repository owner explicitly instructed the research queue to continue without Grok after repeated structured-output failures." } ], "review_rule": "Claude-only results require a separate no-tools adversarial audit and remain reviewable drafts with a visible single-provider hold." }, "boundaryDecision": { "entry_kind": "mixin", "status": "accepted", "rationale": "Two axes must be kept separate. The frozen registry's record_plane is 'world-model' (not a 'standalone-mm'-style plane value), and that plane value is not itself a subject-model kind, so it does not compete with entry_kind here. The subject-model entry_kind is independently asserted as 'mixin' by both the frozen registry record and the Claude structure pass, and that is the most defensible schema choice: the scope_statement, boundary_notes and the money-core-pair-integrity finding repeatedly assert the declaration 'lives inside the host's own persisted object and inherits the host's identity and lifecycle,' disclaiming any currency-master, price, account, ledger, payment, instrument or economic-event identity of its own. However, the money-svcstate-operations and money-svccalc-operations bundles describe an independently versioned 'monetary assertion' carrying its own concurrency validators, supersession lifecycle, idempotency keys, review/approval evidence and disposition readiness -- mechanics that in most schemas mark an aggregate or an independently addressable dependent entity, not a pure inline value mixin. This tension is not silently resolved by the evidence pack itself (money-govctl-q-addressability is left as an open question rather than answered), and the registry's own review_state is already 'boundary-review-required.' I accept 'mixin' because it is the converging, explicitly argued self-declaration on both axes and because overriding it would be a unilateral reclassification outside a single-provider audit's authority, but the aggregate-shaped operational machinery must be adjudicated explicitly at the registry boundary review rather than presumed compatible by default." }, "decisions": [ { "concept": "Entry kind: mixin framing versus aggregate-shaped operational bundles", "disposition": "Accepted as mixin; flagged for mandatory boundary-review adjudication of the svcstate/svccalc versioning-and-concurrency machinery", "rationale": "Both the frozen registry and the Claude structure independently converge on mixin, and scope_statement, boundary_notes and money-core-pair-integrity argue it consistently, but the CRUD-with-concurrency-validator contract in money-svcstate-operations reads as aggregate-shaped and is never explicitly reconciled with the stated 'no independent existence' claim." }, { "concept": "Empty relationship/composition contract (relations_ref)", "disposition": "Accepted as an open, tracked gap; not treated as an established contract", "rationale": "The coverage checklist itself marks relationships as 'gap' and known_omissions states the known-relation ledger is empty, so the nine candidate composition links to the ISO 4217 register, CLDR, ISO 20022, exchange-rate publication, the host, decimal/XSD alignment, PROV and the absent-value vocabulary remain unconfirmed pending registry linkage." }, { "concept": "Correction/revision artifact proliferation across three bundles", "disposition": "Deferred for registry-level consolidation review", "rationale": "money-govctl-art-revision-note, money-svcstate-art-correction-plan and money-val-artifact-valuation-correction-notice describe closely related supersession concepts in three different bundles; each has an internally coherent identity_strategy but the boundary between plan, approved correction and domain-specific notice is never explicitly cross-referenced." }, { "concept": "Paywalled tier-1 standards: ISO 4217:2015, IEEE 754-2019, ISO 15489-1:2016", "disposition": "Accepted with caveat: sources used are public list/scope pages, not verified clause text", "rationale": "known_omissions transparently discloses that normative clause text was not retrieved and only publicly readable pages or machine-readable lists were relied on; no finding appears to cite a specific paywalled clause number, which is consistent with the disclosed limitation, but citation strength for these tier-1 sources should be treated as page-level, not clause-level, until verified." }, { "concept": "No universal default rounding tie-rule or digit-bound", "disposition": "Accepted", "rationale": "The refusal to nominate half-up versus half-even as a global default, or two decimals as a global scale, is well evidenced by the cited EU statutory rounding conflict and by currencies with zero, three and four-digit minor units, and matches the adversarial_checks entries that explicitly tested and rejected a two-decimal assumption." }, { "concept": "Advisory-only governance roles and deny-by-default access", "disposition": "Accepted", "rationale": "Accountable owner, steward, valuation authority, preparer, reviewer, approver, records custodian and access administrator are all consistently scoped as non-enforcing metadata, and the access section explicitly assigns decision and enforcement to an external policy decision point, matching the stated boundary against owning authorization logic." }, { "concept": "Weak, host-dependent identity with a conditional surrogate identifier", "disposition": "Accepted with a tracked open question", "rationale": "Identity is defined over host reference, role, currency and valuation context per the artifact_rules identity_priority ladder, which is internally coherent, but money-govctl-q-surrogate-condition leaves the trigger for minting an independent surrogate identifier unanswered, which should be resolved before implementation rather than left entirely to the adopting Dimension." }, { "concept": "Non-ISO-4217 units of account (crypto-assets, CBDC, loyalty points) excluded", "disposition": "Accepted", "rationale": "This is explicitly and repeatedly out of scope in the purpose, scope_statement and out_of_scope list, and the resulting gap is honestly logged in known_omissions rather than silently ignored; no source in the pack supports treating these as ISO 4217-equivalent, so exclusion is the defensible choice." }, { "concept": "Retention, tombstone content and disposal-execution boundary", "disposition": "Accepted", "rationale": "The model assesses readiness, declares tombstone content limited to assertion key, host reference, currency code, retention class, disposition time and disposition record reference, and explicitly assigns disposal execution to the records authority, consistent with its stated boundary against owning audit-trail or disposal machinery elsewhere in the pack." }, { "concept": "Idempotency-Key mechanism sourced from an expired IETF Internet-Draft (SRC-046)", "disposition": "Accepted as a documented convention, not a conformance claim", "rationale": "The model itself flags this in adversarial_checks and known_omissions as a non-normative draft adopted by convention rather than claimed standard conformance, which is the correct honesty level for a tier-3, expired-draft source underpinning a load-bearing concurrency and idempotency contract." }, { "concept": "Bounded and uncertain monetary values (interval declarations)", "disposition": "Deferred", "rationale": "The coverage checklist marks this a 'gap' because no primary monetary-specific source governing derivation or propagation of bounds was found; the structure records endpoints and inclusivity flags without an uncertainty framework, an acceptable placeholder but not a resolved design." } ], "publicationHolds": [ "Owner-authorized single-provider waiver: Grok was waived by the repository owner on 2026-08-29 for repeated structured-output failures, so this draft has not received independent second-provider adversarial review; publication must visibly label it a reviewable draft, not a final result, until that review occurs or the owner explicitly re-waives it.", "Live source verification pending: all 53 cited URLs and their stated version, edition or date labels (e.g. ISO 4217 List One Pblshd=2026-01-01, ECB and Federal Reserve pages accessed 3 September 2026, Treasury dataset updated 2026-08-31) must be re-fetched and confirmed current before this draft is promoted beyond reviewable-draft status, since this audit has no tool access to verify them.", "Relationship contract is empty (relations_ref has no entries) and the registry review_state is boundary-review-required; publication must retain both signals rather than implying the nine candidate composition links or the mixin/aggregate boundary question are already resolved.", "Paywalled tier-1 standards (ISO 4217:2015, IEEE 754-2019, ISO 15489-1:2016) are represented only via public list and scope pages per known_omissions; any future addition of clause-level citations from these standards must be independently verified against the actual paywalled text before publication.", "Independent second-provider review was explicitly waived by the repository owner; this Claude-only result remains a reviewable draft." ], "deferredResearch": [ "Register the nine candidate composition links (ISO 4217 register, CLDR locale data, ISO 20022 message types, exchange-rate publication, host mixin composition, decimal/XSD alignment, PROV alignment, absent-value vocabulary, XBRL precision) so relations_ref is no longer empty.", "Adjudicate whether the independently versioned, concurrency-controlled monetary-assertion lifecycle in money-svcstate-operations and money-svccalc-operations belongs inside this mixin or should be split into a companion aggregate or event model, resolving the tension with money-core-pair-integrity's no-independent-existence claim.", "Retrieve and verify clause-level text for ISO 4217:2015, IEEE 754-2019 and ISO 15489-1:2016, currently represented only through public list pages, titles and scope statements.", "Parse ISO 4217 List Two (registered fund codes) and retrieve the ISO 20022 CurrencyExchange and ActiveCurrencyAndAmount element definitions, both explicitly marked unretrieved in known_omissions.", "Source or develop a governing framework for how bounded or estimated monetary values propagate through comparison, aggregation and reconciliation, since no primary monetary-specific source was found for this coverage gap.", "Survey non-ISO-4217 units of account (crypto-assets, CBDC, loyalty points, commodity units) to decide whether a distinct alternative-catalogue sub-model is warranted beyond the generic 'declared alternative catalogue' mechanism." ] }, "statistics": { "sources": 53, "bundles": 11, "layers": 25, "findings": 47, "questions": 199, "artifacts": 26, "functions": 37 } }