{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"schemaVersion":{"type":"string","const":"rooftop-forecast-record-v1"},"editionVersion":{"type":"string","minLength":1},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"sourceLabel":{"type":"string","minLength":1},"sourceUpdatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"sourceUrls":{"type":"object","properties":{"forecast":{"type":"string","format":"uri"},"estimatedActual":{"type":"string","format":"uri"},"methodology":{"type":"string","format":"uri"}},"required":["forecast","estimatedActual","methodology"],"additionalProperties":false},"sourceReceipts":{"minItems":2,"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["forecast","estimated-actual"]},"receiptId":{"type":"string","minLength":1},"fileName":{"type":"string","minLength":1},"retrievalUrl":{"type":"string","format":"uri"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["role","receiptId","fileName","retrievalUrl","sha256","retrievedAt"],"additionalProperties":false},"uniqueItems":true,"allOf":[{"contains":{"type":"object","required":["role"],"properties":{"role":{"const":"forecast"}}}},{"contains":{"type":"object","required":["role"],"properties":{"role":{"const":"estimated-actual"}}}}]},"methodVersion":{"type":"string","const":"rooftop-forecast-record-v1"},"reuseReview":{"type":"object","properties":{"status":{"type":"string","const":"approved"},"reviewedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"scope":{"type":"string","const":"attributed-interval-values-and-derived-comparisons"}},"required":["status","reviewedAt","scope"],"additionalProperties":false},"status":{"type":"string","const":"available"},"regions":{"minItems":1,"type":"array","items":{"type":"object","properties":{"regionId":{"type":"string","enum":["NSW1","QLD1","SA1","TAS1","VIC1"]},"regionName":{"type":"string","minLength":1},"dates":{"minItems":1,"type":"array","items":{"type":"object","properties":{"operatingDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"marketTimeZone":{"type":"string","const":"Australia/Brisbane"},"marketTimeBasis":{"type":"string","const":"NEM market time (AEST, UTC+10)"},"forecastRunAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"forecastRunMarketTime":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\+10:00$"},"estimateType":{"type":"string","enum":["measurement","satellite"]},"readings":{"type":"object","properties":{"forecastBiasPct":{"anyOf":[{"type":"number"},{"type":"null"}]},"absoluteMissPct":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"insideRangePct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]}},"required":["forecastBiasPct","absoluteMissPct","insideRangePct"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","const":"complete"},"expectedIntervals":{"type":"number","const":48},"forecastIntervals":{"type":"number","const":48},"forecastMeanIntervals":{"type":"number","const":48},"forecastRangeIntervals":{"type":"number","const":48},"forecastReceiptIntervals":{"type":"number","const":48},"estimatedActualReceiptIntervals":{"type":"number","const":48},"estimatedActualIntervals":{"type":"number","const":48},"matchedIntervals":{"type":"number","const":48},"daylightIntervals":{"type":"integer","minimum":1,"maximum":48},"qualityIntervals":{"type":"number","const":48},"rangeEligibleIntervals":{"type":"integer","minimum":1,"maximum":48},"rangeCoveredIntervals":{"type":"integer","minimum":0,"maximum":48},"coveragePct":{"type":"number","const":100},"duplicateIntervals":{"type":"number","const":0},"invalidProbabilityIntervals":{"type":"number","const":0}},"required":["status","expectedIntervals","forecastIntervals","forecastMeanIntervals","forecastRangeIntervals","forecastReceiptIntervals","estimatedActualReceiptIntervals","estimatedActualIntervals","matchedIntervals","daylightIntervals","qualityIntervals","rangeEligibleIntervals","rangeCoveredIntervals","coveragePct","duplicateIntervals","invalidProbabilityIntervals"],"additionalProperties":false},"intervals":{"minItems":48,"maxItems":48,"type":"array","items":{"type":"object","properties":{"intervalEndUtc":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"intervalEndMarketTime":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\+10:00$"},"intervalMinutes":{"type":"number","const":30},"forecastMeanMw":{"type":"number","minimum":0},"forecastPoe50Mw":{"type":"number","minimum":0},"forecastPoe10Mw":{"type":"number","minimum":0},"forecastPoe90Mw":{"type":"number","minimum":0},"estimatedActualMw":{"type":"number","minimum":0},"actualQuality":{"type":"number","minimum":0},"forecastSourceReceiptId":{"type":"string","minLength":1},"estimatedActualSourceReceiptId":{"type":"string","minLength":1}},"required":["intervalEndUtc","intervalEndMarketTime","intervalMinutes","forecastMeanMw","forecastPoe50Mw","forecastPoe10Mw","forecastPoe90Mw","estimatedActualMw","actualQuality","forecastSourceReceiptId","estimatedActualSourceReceiptId"],"additionalProperties":false}}},"required":["operatingDate","marketTimeZone","marketTimeBasis","forecastRunAt","forecastRunMarketTime","estimateType","readings","completeness","intervals"],"additionalProperties":false}}},"required":["regionId","regionName","dates"],"additionalProperties":false}}},"required":["schemaVersion","editionVersion","generatedAt","sourceLabel","sourceUpdatedAt","sourceUrls","sourceReceipts","methodVersion","reuseReview","status","regions"],"additionalProperties":false},{"type":"object","properties":{"schemaVersion":{"type":"string","const":"rooftop-forecast-record-v1"},"editionVersion":{"type":"string","minLength":1},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"sourceLabel":{"type":"string","minLength":1},"sourceUpdatedAt":{"type":"null"},"sourceUrls":{"type":"object","properties":{"forecast":{"type":"string","format":"uri"},"estimatedActual":{"type":"string","format":"uri"},"methodology":{"type":"string","format":"uri"}},"required":["forecast","estimatedActual","methodology"],"additionalProperties":false},"sourceReceipts":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["forecast","estimated-actual"]},"receiptId":{"type":"string","minLength":1},"fileName":{"type":"string","minLength":1},"retrievalUrl":{"type":"string","format":"uri"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"retrievedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["role","receiptId","fileName","retrievalUrl","sha256","retrievedAt"],"additionalProperties":false}},"methodVersion":{"type":"string","const":"rooftop-forecast-record-v1"},"reuseReview":{"type":"object","properties":{"status":{"type":"string","enum":["required","approved"]},"reviewedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"scope":{"type":"string","const":"attributed-interval-values-and-derived-comparisons"}},"required":["status","reviewedAt","scope"],"additionalProperties":false},"status":{"type":"string","const":"unavailable"},"reason":{"type":"string","enum":["source-not-integrated","source-edition-incomplete","source-receipts-required","reuse-review-required"]},"message":{"type":"string","minLength":1}},"required":["schemaVersion","editionVersion","generatedAt","sourceLabel","sourceUpdatedAt","sourceUrls","sourceReceipts","methodVersion","reuseReview","status","reason","message"],"additionalProperties":false}],"$id":"https://solaranalytica.com/rooftop-forecast-record/schema.json","title":"Solar Analytica Rooftop Forecast Record","description":"The latest AEMO rooftop PV forecast VERSION_DATETIME no later than 12:00 AEST on the preceding operating day, compared with AEMO's later estimated actual. Raw AEMO interval source archives are not redistributed.","$comment":"estimated-actual-rule: estimated actual is never relabelled as directly metered rooftop generation. Available payloads are also executable-contract checked for probability ordering, ordered unique half-hours, derived counters and readings, unique role-correct receipt references, fixed-offset timestamp equivalence, and prior-day cutoff compliance."}