{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://solaranalytica.com/data/grid-sources/schema.json","title":"Solar Analytica canonical grid observation","description":"Immutable production-side grid observation retained from a named primary provider. A source revision creates another value hash for the same observation key.","type":"object","additionalProperties":false,"required":["source_key","observation_key","value_hash","market_code","zone_code","reporting_date","interval_start","interval_end","timezone","interval_minutes","granularity","metric","value","unit","evidence_type","quality_status","data_source","data_version","data_confidence","evidence_url","retrieved_at"],"properties":{"source_key":{"type":"string","minLength":1},"observation_key":{"type":"string","minLength":1},"value_hash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"market_code":{"type":"string","minLength":1},"zone_code":{"type":"string","minLength":1},"reporting_date":{"type":"string","format":"date"},"interval_start":{"type":"string","format":"date-time"},"interval_end":{"type":"string","format":"date-time"},"timezone":{"type":"string","minLength":1},"interval_minutes":{"type":"integer","minimum":1,"maximum":1500},"granularity":{"enum":["five-minute","fifteen-minute","half-hourly","hourly","daily"]},"metric":{"enum":["demand","demand-forecast","generation","net-generation","interchange","price","production-carbon-intensity","emission-factor-coverage"]},"category":{"type":["string","null"]},"value":{"type":"number"},"unit":{"type":"string","minLength":1},"evidence_type":{"enum":["measured","published","forecast","estimated","derived"]},"quality_status":{"enum":["accepted","provisional","coverage-limited"]},"source_record_key":{"type":["string","null"]},"source_published_at":{"type":["string","null"],"format":"date-time"},"calculation_basis":{"type":["string","null"]},"metadata":{"type":"object"},"data_source":{"type":"string","minLength":1},"data_version":{"type":"string","minLength":1},"data_confidence":{"enum":["High","Medium","Low","Unresearched"]},"evidence_url":{"type":"string","format":"uri"},"retrieved_at":{"type":"string","format":"date-time"}},"x-solar-analytica-revision-rule":"observation_key identifies the series interval; value_hash distinguishes immutable revisions.","x-solar-analytica-carbon-rule":{"methodVersion":"grid-carbon-ipcc-ar5-v1","coverageThresholdPct":95,"accountingBasis":"production-side lifecycle intensity","belowThreshold":"publish coverage only; withhold carbon intensity"}}