{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "market_date": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "shadow": { "type": "object", "properties": { "proposal_id": { "anyOf": [ { "type": "string", "minLength": 1 }, { "type": "null" } ] }, "digest": { "anyOf": [ { "type": "string", "pattern": "^[0-9a-f]{64}$" }, { "type": "null" } ] }, "outcome": { "type": "string", "minLength": 1 }, "expected_revenue_yuan": { "anyOf": [ { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, { "type": "null" } ] }, "line": { "anyOf": [ { "type": "object", "properties": { "energy_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "cleared_energy_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "realised_revenue_yuan": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" } }, "required": [ "energy_mwh", "cleared_energy_mwh", "realised_revenue_yuan" ], "additionalProperties": false }, { "type": "null" } ] }, "llm_used": { "type": "boolean" } }, "required": [ "proposal_id", "digest", "outcome", "expected_revenue_yuan", "line", "llm_used" ], "additionalProperties": false }, "human": { "anyOf": [ { "type": "object", "properties": { "record_id": { "type": "string", "minLength": 1 }, "source": { "type": "string", "enum": [ "TRADING_PLATFORM_EXPORT", "MANUAL_ENTRY", "SYNTHETIC_NAIVE" ] }, "line": { "type": "object", "properties": { "energy_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "cleared_energy_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "realised_revenue_yuan": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" } }, "required": [ "energy_mwh", "cleared_energy_mwh", "realised_revenue_yuan" ], "additionalProperties": false } }, "required": [ "record_id", "source", "line" ], "additionalProperties": false }, { "type": "null" } ] }, "hindsight": { "type": "object", "properties": { "energy_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "cleared_energy_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "realised_revenue_yuan": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" } }, "required": [ "energy_mwh", "cleared_energy_mwh", "realised_revenue_yuan" ], "additionalProperties": false }, "naive": { "type": "object", "properties": { "energy_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "cleared_energy_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "realised_revenue_yuan": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" } }, "required": [ "energy_mwh", "cleared_energy_mwh", "realised_revenue_yuan" ], "additionalProperties": false }, "award": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "energy_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" } }, "required": [ "id", "energy_mwh" ], "additionalProperties": false }, { "type": "null" } ] }, "dispatch": { "anyOf": [ { "type": "object", "properties": { "proposal_id": { "type": "string", "minLength": 1 }, "outcome": { "type": "string", "minLength": 1 }, "shortfall_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" } }, "required": [ "proposal_id", "outcome", "shortfall_mwh" ], "additionalProperties": false }, { "type": "null" } ] }, "execution": { "anyOf": [ { "type": "object", "properties": { "planned_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "delivered_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "deviation_mwh": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "fulfillment_ratio": { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, "within_band": { "type": "boolean" }, "simulated": { "type": "boolean" } }, "required": [ "planned_mwh", "delivered_mwh", "deviation_mwh", "fulfillment_ratio", "within_band", "simulated" ], "additionalProperties": false }, { "type": "null" } ] }, "forecast": { "type": "object", "properties": { "load_mape": { "anyOf": [ { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, { "type": "null" } ] }, "pv_nrmse": { "anyOf": [ { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, { "type": "null" } ] }, "price_mape": { "anyOf": [ { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, { "type": "null" } ] }, "price_coverage_p10_p90": { "anyOf": [ { "type": "string", "pattern": "^-?\\d+(\\.\\d+)?$" }, { "type": "null" } ] } }, "required": [ "load_mape", "pv_nrmse", "price_mape", "price_coverage_p10_p90" ], "additionalProperties": false }, "decision_latency_ms": { "anyOf": [ { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, { "type": "null" } ] }, "review_finding_id": { "anyOf": [ { "type": "string", "minLength": 1 }, { "type": "null" } ] }, "envelope_recommendations": { "type": "array", "items": { "type": "object", "properties": { "envelope_id": { "type": "string", "minLength": 1 }, "action": { "type": "string", "enum": [ "WIDEN", "NARROW", "SUSPEND", "KEEP" ] } }, "required": [ "envelope_id", "action" ], "additionalProperties": false } }, "breakers_tripped": { "type": "array", "items": { "type": "string", "enum": [ "L0", "L1", "L2", "L3", "L4" ] } }, "abnormal_day": { "type": "boolean" }, "lineage_complete": { "type": "boolean" }, "lineage_gaps": { "type": "array", "items": { "type": "string" } }, "generated_at": { "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": [ "id", "market_date", "shadow", "human", "hindsight", "naive", "award", "dispatch", "execution", "forecast", "decision_latency_ms", "review_finding_id", "envelope_recommendations", "breakers_tripped", "abnormal_day", "lineage_complete", "lineage_gaps", "generated_at" ], "additionalProperties": false, "$id": "https://vpp-ai-platform/contracts/shadow_day_record.json", "title": "ShadowDayRecord" }