{
 "schemas_version": "4.4.0",
 "manifest": {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
   "schema_version",
   "algorithm_version",
   "serialization_profile",
   "artifacts"
  ],
  "properties": {
   "schema_version": {
    "const": "4.4.0"
   },
   "algorithm_version": {
    "const": "iotsyn-smartcity-4.4.0"
   },
   "serialization_profile": {
    "const": "canonical-json-csv-v1"
   },
   "git_commit": {
    "type": "string"
   },
   "runtime": {
    "type": "string"
   },
   "container_digest": {
    "type": "string"
   },
   "arrival_event_artifact": {
    "enum": [
     "present",
     "omitted"
    ]
   },
   "artifacts": {
    "type": "object",
    "additionalProperties": {
     "type": "object",
     "required": [
      "bytes",
      "sha256"
     ],
     "properties": {
      "bytes": {
       "type": "integer",
       "minimum": 0
      },
      "sha256": {
       "type": "string",
       "pattern": "^[0-9a-f]{64}$"
      }
     }
    }
   }
  },
  "additionalProperties": true
 },
 "scenario_skeleton": {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
   "schema_version",
   "algorithm_version",
   "master_seed",
   "time",
   "location",
   "occupancy",
   "thermal",
   "air_quality",
   "noise",
   "decision",
   "serialization"
  ],
  "properties": {
   "schema_version": {
    "const": "4.4.0"
   },
   "master_seed": {
    "type": "string",
    "pattern": "^[0-9]+$"
   },
   "time": {
    "type": "object",
    "required": [
     "start_timestamp",
     "step_seconds",
     "row_count",
     "timezone",
     "warmup_duration_minutes"
    ]
   },
   "location": {
    "type": "object",
    "required": [
     "latitude_deg",
     "longitude_deg",
     "solar_position_algorithm_version"
    ],
    "properties": {
     "solar_position_algorithm_version": {
      "const": "iotsyn_solar_v1"
     }
    }
   },
   "occupancy": {
    "type": "object",
    "required": [
     "initial_occupancy_mode",
     "space_capacity_persons",
     "capacity_mode"
    ],
    "properties": {
     "capacity_mode": {
      "enum": [
       "report_only",
       "reject",
       "defer_fifo"
      ]
     },
     "space_capacity_persons": {
      "type": "integer",
      "exclusiveMinimum": 0
     }
    }
   },
   "initial_states": {
    "type": "object",
    "properties": {
     "cloud": {
      "enum": [
       "clear",
       "partly_cloudy",
       "overcast"
      ]
     },
     "precipitation": {
      "enum": [
       "dry",
       "wet"
      ]
     },
     "crowd": {
      "enum": [
       "quiet",
       "normal",
       "busy",
       "event"
      ]
     }
    }
   },
   "serialization": {
    "type": "object",
    "required": [
     "profile"
    ],
    "properties": {
     "profile": {
      "const": "canonical-json-csv-v1"
     }
    }
   }
  },
  "additionalProperties": true,
  "note": "the normalized file materializes every resolved default; this skeleton pins only the mandatory blocks"
 },
 "strategy_file": {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
   "schema_version",
   "episodes",
   "summary"
  ],
  "properties": {
   "schema_version": {
    "const": "4.4.0"
   },
   "episodes": {
    "type": "array",
    "items": {
     "type": "object",
     "required": [
      "risk_episode_start",
      "risk_episode_end",
      "duration_minutes",
      "peak_level",
      "elevated_hazards",
      "target_audience",
      "peak_exposed_audience_count",
      "audience_person_minutes",
      "recommended_strategy",
      "priority_score",
      "priority_components",
      "decision_mode",
      "issued_at",
      "valid_from",
      "valid_to",
      "trigger_rule",
      "assumption_source",
      "evidence_basis",
      "confidence_level"
     ],
     "properties": {
      "risk_episode_start": {
       "type": "string"
      },
      "risk_episode_end": {
       "type": "string"
      },
      "duration_minutes": {
       "type": "number",
       "exclusiveMinimum": 0
      },
      "peak_level": {
       "enum": [
        "high_risk",
        "severe"
       ]
      },
      "elevated_hazards": {
       "type": "array",
       "items": {
        "enum": [
         "thermal",
         "air_quality",
         "noise",
         "crowding"
        ]
       },
       "minItems": 1
      },
      "target_audience": {
       "enum": [
        "general_public",
        "families",
        "elderly",
        "students",
        "commuters",
        "event_attendees"
       ]
      },
      "peak_exposed_audience_count": {
       "type": "integer",
       "minimum": 0
      },
      "audience_person_minutes": {
       "type": "number",
       "minimum": 0
      },
      "priority_components": {
       "type": "object",
       "required": [
        "H",
        "X",
        "weights_used",
        "sensitivities_used"
       ]
      },
      "decision_mode": {
       "enum": [
        "nowcast",
        "forecast",
        "ex_post"
       ]
      },
      "forecast_lead_minutes": {
       "type": [
        "number",
        "null"
       ]
      },
      "forecast_model_version": {
       "type": [
        "string",
        "null"
       ]
      },
      "boundary_censored": {
       "type": "boolean"
      },
      "evidence_basis": {
       "type": "object"
      },
      "confidence_level": {
       "type": "string"
      }
     }
    }
   },
   "summary": {
    "type": "object"
   }
  },
  "additionalProperties": true
 },
 "validation_report": {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
   "schema_version",
   "overall_status",
   "checks"
  ],
  "properties": {
   "schema_version": {
    "const": "4.4.0"
   },
   "overall_status": {
    "enum": [
     "PASS",
     "WARN",
     "FAIL"
    ]
   },
   "checks": {
    "type": "array",
    "items": {
     "type": "object",
     "required": [
      "id",
      "class",
      "status"
     ],
     "properties": {
      "class": {
       "enum": [
        "numerical_correctness",
        "statistical_fidelity",
        "internal_consistency",
        "external_benchmark"
       ]
      },
      "status": {
       "enum": [
        "PASS",
        "WARN",
        "FAIL",
        "NOT_EVALUATED"
       ]
      },
      "p_value_raw": {
       "type": [
        "number",
        "null"
       ]
      },
      "p_value_adjusted": {
       "type": [
        "number",
        "null"
       ]
      }
     }
    }
   }
  },
  "additionalProperties": true
 },
 "arrival_event_record": {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
   "event_id",
   "event_sequence_id",
   "timestamp",
   "event_type"
  ],
  "properties": {
   "event_id": {
    "type": "string"
   },
   "event_sequence_id": {
    "type": "integer",
    "minimum": 0
   },
   "timestamp": {
    "type": "string"
   },
   "event_type": {
    "enum": [
     "offered_arrival",
     "admitted_arrival",
     "rejected_arrival",
     "deferred_arrival",
     "deferred_admission",
     "deferred_timeout",
     "departure"
    ]
   },
   "visitor_id": {
    "type": [
     "string",
     "null"
    ]
   },
   "audience_segment": {
    "type": [
     "string",
     "null"
    ]
   },
   "dwell_seconds": {
    "type": [
     "number",
     "null"
    ]
   },
   "scheduled_departure": {
    "type": [
     "string",
     "null"
    ]
   },
   "crowd_state": {
    "type": [
     "string",
     "null"
    ]
   }
  },
  "additionalProperties": false,
  "file_format": "JSON Lines, one canonical JSON object per line, ordered by (timestamp, event-class order, event_sequence_id)"
 }
}