{
  "status": "computed; independently checked arithmetic",
  "study_a": {
    "n_common_dates": 250,
    "mean_signed_bps": "-0.9313608035459101563267128703523360871409561642364",
    "median_signed_bps": "-1.0469658259485504316295643056647625506333215108500",
    "mean_absolute_bps": "16.814855626759196067269758624557081818290247556084",
    "median_absolute_bps": "12.082988967335327079346861299121976090523591168300",
    "minimum_signed_bps": "-66.405699252671524689777198333061718622680604381400",
    "minimum_date": "2025-04-11",
    "maximum_signed_bps": "72.768798313422347153900210822206605762473647224000",
    "maximum_date": "2025-04-08",
    "maximum_absolute_bps": "72.768798313422347153900210822206605762473647224000",
    "maximum_absolute_date": "2025-04-08",
    "positive_days": 122,
    "negative_days": 128,
    "zero_days": 0,
    "nbp_dates": 251,
    "ecb_usd_pln_dates_2025": 255,
    "nbp_only_dates": [
      "2025-04-18"
    ],
    "ecb_only_dates": [
      "2025-01-06",
      "2025-06-19",
      "2025-08-15",
      "2025-11-11",
      "2025-12-24"
    ],
    "unit": "basis points of NBP/ECB-implied ratio minus one; positive means NBP higher",
    "expression": "10000 * (NBP_PLN_per_USD * ECB_USD_per_EUR / ECB_PLN_per_EUR - 1)",
    "join": "same ISO publication date only; inner join; no forward filling or interpolation"
  },
  "study_b": {
    "period": [
      "2016-01-01",
      "2025-12-31"
    ],
    "unit": "one ECB USD-per-EUR reference observation per publication date",
    "totals": {
      "weekdays": 2609,
      "usd_publications": 2560,
      "weekdays_without_publication": 49,
      "target_weekday_closures": 49,
      "scheduled_open_weekdays": 2560,
      "unexpected_missing_open_weekdays": 0,
      "publications_on_target_closures": 0
    },
    "by_year": [
      {
        "year": 2016,
        "weekdays": 261,
        "usd_publications": 257,
        "weekdays_without_publication": 4,
        "target_weekday_closures": 4,
        "scheduled_open_weekdays": 257,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2016-03-24",
        "maximum_interval_next": "2016-03-29"
      },
      {
        "year": 2017,
        "weekdays": 260,
        "usd_publications": 255,
        "weekdays_without_publication": 5,
        "target_weekday_closures": 5,
        "scheduled_open_weekdays": 255,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2017-04-13",
        "maximum_interval_next": "2017-04-18"
      },
      {
        "year": 2018,
        "weekdays": 261,
        "usd_publications": 255,
        "weekdays_without_publication": 6,
        "target_weekday_closures": 6,
        "scheduled_open_weekdays": 255,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2018-03-29",
        "maximum_interval_next": "2018-04-03"
      },
      {
        "year": 2019,
        "weekdays": 261,
        "usd_publications": 255,
        "weekdays_without_publication": 6,
        "target_weekday_closures": 6,
        "scheduled_open_weekdays": 255,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2019-04-18",
        "maximum_interval_next": "2019-04-23"
      },
      {
        "year": 2020,
        "weekdays": 262,
        "usd_publications": 257,
        "weekdays_without_publication": 5,
        "target_weekday_closures": 5,
        "scheduled_open_weekdays": 257,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2020-04-09",
        "maximum_interval_next": "2020-04-14"
      },
      {
        "year": 2021,
        "weekdays": 261,
        "usd_publications": 258,
        "weekdays_without_publication": 3,
        "target_weekday_closures": 3,
        "scheduled_open_weekdays": 258,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2021-04-01",
        "maximum_interval_next": "2021-04-06"
      },
      {
        "year": 2022,
        "weekdays": 260,
        "usd_publications": 257,
        "weekdays_without_publication": 3,
        "target_weekday_closures": 3,
        "scheduled_open_weekdays": 257,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2022-04-14",
        "maximum_interval_next": "2022-04-19"
      },
      {
        "year": 2023,
        "weekdays": 260,
        "usd_publications": 255,
        "weekdays_without_publication": 5,
        "target_weekday_closures": 5,
        "scheduled_open_weekdays": 255,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2023-04-06",
        "maximum_interval_next": "2023-04-11"
      },
      {
        "year": 2024,
        "weekdays": 262,
        "usd_publications": 256,
        "weekdays_without_publication": 6,
        "target_weekday_closures": 6,
        "scheduled_open_weekdays": 256,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2024-03-28",
        "maximum_interval_next": "2024-04-02"
      },
      {
        "year": 2025,
        "weekdays": 261,
        "usd_publications": 255,
        "weekdays_without_publication": 6,
        "target_weekday_closures": 6,
        "scheduled_open_weekdays": 255,
        "unexpected_missing_open_weekdays": 0,
        "publications_on_target_closures": 0,
        "maximum_interval_calendar_days": 5,
        "maximum_interval_previous": "2025-04-17",
        "maximum_interval_next": "2025-04-22"
      }
    ],
    "unpublished_weekdays": [
      {
        "date": "2016-01-01",
        "reason": "New Year"
      },
      {
        "date": "2016-03-25",
        "reason": "Good Friday"
      },
      {
        "date": "2016-03-28",
        "reason": "Easter Monday"
      },
      {
        "date": "2016-12-26",
        "reason": "26 December"
      },
      {
        "date": "2017-04-14",
        "reason": "Good Friday"
      },
      {
        "date": "2017-04-17",
        "reason": "Easter Monday"
      },
      {
        "date": "2017-05-01",
        "reason": "Labour Day"
      },
      {
        "date": "2017-12-25",
        "reason": "Christmas Day"
      },
      {
        "date": "2017-12-26",
        "reason": "26 December"
      },
      {
        "date": "2018-01-01",
        "reason": "New Year"
      },
      {
        "date": "2018-03-30",
        "reason": "Good Friday"
      },
      {
        "date": "2018-04-02",
        "reason": "Easter Monday"
      },
      {
        "date": "2018-05-01",
        "reason": "Labour Day"
      },
      {
        "date": "2018-12-25",
        "reason": "Christmas Day"
      },
      {
        "date": "2018-12-26",
        "reason": "26 December"
      },
      {
        "date": "2019-01-01",
        "reason": "New Year"
      },
      {
        "date": "2019-04-19",
        "reason": "Good Friday"
      },
      {
        "date": "2019-04-22",
        "reason": "Easter Monday"
      },
      {
        "date": "2019-05-01",
        "reason": "Labour Day"
      },
      {
        "date": "2019-12-25",
        "reason": "Christmas Day"
      },
      {
        "date": "2019-12-26",
        "reason": "26 December"
      },
      {
        "date": "2020-01-01",
        "reason": "New Year"
      },
      {
        "date": "2020-04-10",
        "reason": "Good Friday"
      },
      {
        "date": "2020-04-13",
        "reason": "Easter Monday"
      },
      {
        "date": "2020-05-01",
        "reason": "Labour Day"
      },
      {
        "date": "2020-12-25",
        "reason": "Christmas Day"
      },
      {
        "date": "2021-01-01",
        "reason": "New Year"
      },
      {
        "date": "2021-04-02",
        "reason": "Good Friday"
      },
      {
        "date": "2021-04-05",
        "reason": "Easter Monday"
      },
      {
        "date": "2022-04-15",
        "reason": "Good Friday"
      },
      {
        "date": "2022-04-18",
        "reason": "Easter Monday"
      },
      {
        "date": "2022-12-26",
        "reason": "26 December"
      },
      {
        "date": "2023-04-07",
        "reason": "Good Friday"
      },
      {
        "date": "2023-04-10",
        "reason": "Easter Monday"
      },
      {
        "date": "2023-05-01",
        "reason": "Labour Day"
      },
      {
        "date": "2023-12-25",
        "reason": "Christmas Day"
      },
      {
        "date": "2023-12-26",
        "reason": "26 December"
      },
      {
        "date": "2024-01-01",
        "reason": "New Year"
      },
      {
        "date": "2024-03-29",
        "reason": "Good Friday"
      },
      {
        "date": "2024-04-01",
        "reason": "Easter Monday"
      },
      {
        "date": "2024-05-01",
        "reason": "Labour Day"
      },
      {
        "date": "2024-12-25",
        "reason": "Christmas Day"
      },
      {
        "date": "2024-12-26",
        "reason": "26 December"
      },
      {
        "date": "2025-01-01",
        "reason": "New Year"
      },
      {
        "date": "2025-04-18",
        "reason": "Good Friday"
      },
      {
        "date": "2025-04-21",
        "reason": "Easter Monday"
      },
      {
        "date": "2025-05-01",
        "reason": "Labour Day"
      },
      {
        "date": "2025-12-25",
        "reason": "Christmas Day"
      },
      {
        "date": "2025-12-26",
        "reason": "26 December"
      }
    ],
    "scope": "Completeness within this downloaded snapshot, not proof of historical website uptime or first-release vintages; no OHLC, bid/ask, volume or ticks."
  },
  "independent_verification": {
    "method": "Every A row and four headline aggregates independently recomputed as exact Fraction rational arithmetic; Decimal tolerance 1e-43. Calendar weekday counts independently checked via month calendars; computus checked against a separate explicit Easter date list.",
    "study_a_monthly_aggregates_checked": 12,
    "study_a_rows_checked": 250,
    "study_b_years_checked": 10,
    "PASS": true,
    "ecb_xml_vs_official_api_csv_observations_checked": 2560,
    "ecb_calendar_independent_api_date_sets_checked": 10,
    "snapshot_hashes_checked": 6,
    "independent_code": "finalize.py"
  },
  "snapshot_provenance": "provenance.json",
  "publication_files": [
    "public-derived/study-a-monthly-aggregates.csv",
    "public-derived/study-b-yearly-calendar.csv",
    "public-derived/study-b-daily-calendar.csv",
    "public-derived/study-a-monthly.svg",
    "public-derived/study-b-calendar.svg",
    "public-ecb-originals/ecb-eurofxref-hist.xml",
    "public-ecb-originals/ecb-api-usd-2016-2025.csv",
    "public-ecb-originals/ATTRIBUTION.txt"
  ],
  "private_not_for_publication": [
    "private-snapshots/nbp-*.json",
    "private-snapshots/study-a-private-daily-join.csv"
  ],
  "sources": [
    "https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html",
    "https://www.ecb.europa.eu/press/pr/date/2015/html/pr151207.en.html",
    "https://www.ecb.europa.eu/press/pr/date/2000/html/pr001214_4.en.html",
    "https://www.ecb.europa.eu/stats/ecb_statistics/governance_and_quality_framework/html/usage_policy.en.html",
    "https://api.nbp.pl/en.html",
    "https://nbp.pl/statystyka-i-sprawozdawczosc/kursy/informacja-o-terminach-publikacji-kursow-walut/",
    "https://static.nbp.pl/dokumenty/regulaminy/regulamin_nbppl.pdf",
    "https://dzu.nbp.pl/DU_NBP/2023/1/akt.pdf",
    "https://data.ecb.europa.eu/help/api/data"
  ],
  "code_sha256": "a6a72e6728ae64c5e8d699b9f67a01d7cba9b3c0a6cf22961f15b55dc8121d47",
  "reuse": {
    "ECB": "Unchanged original snapshots with attribution; derived calculations labelled separately.",
    "NBP": "No raw redistribution permission established. Private originals and private daily join excluded from public materials. Only aggregate monthly results supplied."
  },
  "drafts": [
    "study-a-pl.md",
    "study-a-en.md",
    "study-b-pl.md",
    "study-b-en.md"
  ],
  "limitations": [
    "Same publication date is not a simultaneous quote; no fixing timestamp for each row.",
    "No arbitrage, spread, transaction-cost or broker-execution inference.",
    "Snapshot completeness does not prove first-release availability or lack of revisions.",
    "NBP precise fixing method in force across 2025 not fully audited; no precise fixing time asserted."
  ],
  "finalizer_sha256": "311bdbe539e73cbb267a8f99740231bd386468aa9d836def54178cce45c81a6d"
}
