changedInput schema / properties / inputs / oneOf
Previous value: -[
- {
- "additionalProperties": false,
- "properties": {
- "figures": {
- "additionalProperties": false,
- "properties": {
- "crew": {
- "description": "Crew members exposed to a nonmatching hour. ",
- "maximum": 10000,
- "minimum": 0,
- "type": "number"
- },
- "endHour": {
- "description": "Local working-day end hour (1–24). ",
- "maximum": 24,
- "minimum": 1,
- "type": "number"
- },
- "fixedCost": {
- "description": "Other fixed disruption scenario cost (USD). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "hourlyCost": {
- "description": "Entered cost per crew member per nonmatching hour (USD). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "maxHumidity": {
- "description": "Maximum entered relative humidity (%). ",
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- "maxPrecip": {
- "description": "Maximum entered precipitation probability (%). Probability is not rainfall amount or probability of a business loss.",
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- "maxTempF": {
- "description": "Maximum entered temperature (°F). ",
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- "maxWindMph": {
- "description": "Maximum entered sustained wind (mph). ",
- "maximum": 300,
- "minimum": 0,
- "type": "number"
- },
- "minTempF": {
- "description": "Minimum entered temperature (°F). ",
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- "requiredHours": {
- "description": "Required uninterrupted whole hours. ",
- "maximum": 24,
- "minimum": 1,
- "type": "number"
- },
- "startHour": {
- "description": "Local working-day start hour (0–23). ",
- "maximum": 23,
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "minTempF",
- "maxTempF",
- "maxWindMph",
- "maxPrecip",
- "maxHumidity",
- "startHour",
- "endHour",
- "requiredHours",
- "crew",
- "hourlyCost",
- "fixedCost"
- ],
- "type": "object"
- },
- "mode": {
- "const": "windows",
- "type": "string"
- },
- "periods": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "endTime": {
- "format": "date-time",
- "type": "string"
- },
- "humidity": {
- "oneOf": [
- {
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "precipProbability": {
- "oneOf": [
- {
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "startTime": {
- "format": "date-time",
- "type": "string"
- },
- "temperatureF": {
- "oneOf": [
- {
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "windMph": {
- "oneOf": [
- {
- "maximum": 400,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "required": [
- "startTime",
- "endTime",
- "temperatureF",
- "windMph",
- "precipProbability",
- "humidity"
- ],
- "type": "object"
- },
- "maxItems": 48,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "mode",
- "figures",
- "periods"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "figures": {
- "additionalProperties": false,
- "properties": {
- "baseF": {
- "description": "Balance-point temperature (°F). ",
- "maximum": 150,
- "minimum": -100,
- "type": "number"
- },
- "cop": {
- "description": "Heating system COP or efficiency as a ratio. Electric resistance: 1; heat-pump COP must match conditions. Combustion efficiency is below 1; output is input-energy equivalent, not metered fuel.",
- "maximum": 20,
- "minimum": 0.01,
- "type": "number"
- },
- "heatLoss": {
- "description": "Entered building heat-loss coefficient (kW thermal per °F). An engineering/site-specific input. Degree-hours alone do not establish actual building energy use.",
- "maximum": 100000,
- "minimum": 0,
- "type": "number"
- },
- "price": {
- "description": "Entered input-energy price (USD/kWh). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "baseF",
- "heatLoss",
- "cop",
- "price"
- ],
- "type": "object"
- },
- "mode": {
- "const": "degreehours",
- "type": "string"
- },
- "periods": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "endTime": {
- "format": "date-time",
- "type": "string"
- },
- "humidity": {
- "oneOf": [
- {
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "precipProbability": {
- "oneOf": [
- {
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "startTime": {
- "format": "date-time",
- "type": "string"
- },
- "temperatureF": {
- "oneOf": [
- {
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "windMph": {
- "oneOf": [
- {
- "maximum": 400,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "required": [
- "startTime",
- "endTime",
- "temperatureF",
- "windMph",
- "precipProbability",
- "humidity"
- ],
- "type": "object"
- },
- "maxItems": 48,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "mode",
- "figures",
- "periods"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "figures": {
- "additionalProperties": false,
- "properties": {
- "areaSqft": {
- "description": "Catchment area (square feet). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "capacity": {
- "description": "Available storage capacity (US gallons). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "capture": {
- "description": "Collectible fraction (%). ",
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- "rainInches": {
- "description": "Entered rain depth (inches). Enter a measured or explicitly chosen scenario depth. Never substitute precipitation probability.",
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "rainInches",
- "areaSqft",
- "capture",
- "capacity"
- ],
- "type": "object"
- },
- "mode": {
- "const": "rainfall",
- "type": "string"
- }
- },
- "required": [
- "mode",
- "figures"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "figures": {
- "additionalProperties": false,
- "properties": {
- "humidity": {
- "description": "Relative humidity (%). ",
- "maximum": 100,
- "minimum": 0.1,
- "type": "number"
- },
- "surfaceF": {
- "description": "Measured surface temperature (°F). ",
- "maximum": 200,
- "minimum": -100,
- "type": "number"
- },
- "temperatureF": {
- "description": "Air temperature (°F). ",
- "maximum": 140,
- "minimum": -40,
- "type": "number"
- }
- },
- "required": [
- "temperatureF",
- "humidity",
- "surfaceF"
- ],
- "type": "object"
- },
- "mode": {
- "const": "drying",
- "type": "string"
- }
- },
- "required": [
- "mode",
- "figures"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "earlierPeriods": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "endTime": {
- "format": "date-time",
- "type": "string"
- },
- "humidity": {
- "oneOf": [
- {
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "precipProbability": {
- "oneOf": [
- {
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "startTime": {
- "format": "date-time",
- "type": "string"
- },
- "temperatureF": {
- "oneOf": [
- {
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "windMph": {
- "oneOf": [
- {
- "maximum": 400,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "required": [
- "startTime",
- "endTime",
- "temperatureF",
- "windMph",
- "precipProbability",
- "humidity"
- ],
- "type": "object"
- },
- "maxItems": 24,
- "minItems": 1,
- "type": "array"
- },
- "figures": {
- "additionalProperties": false,
- "properties": {
- "crew": {
- "description": "Crew members exposed to a nonmatching hour. ",
- "maximum": 10000,
- "minimum": 0,
- "type": "number"
- },
- "endHour": {
- "description": "Local working-day end hour (1–24). ",
- "maximum": 24,
- "minimum": 1,
- "type": "number"
- },
- "fixedCost": {
- "description": "Other fixed disruption scenario cost (USD). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "hourlyCost": {
- "description": "Entered cost per crew member per nonmatching hour (USD). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "maxHumidity": {
- "description": "Maximum entered relative humidity (%). ",
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- "maxPrecip": {
- "description": "Maximum entered precipitation probability (%). Probability is not rainfall amount or probability of a business loss.",
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- "maxTempF": {
- "description": "Maximum entered temperature (°F). ",
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- "maxWindMph": {
- "description": "Maximum entered sustained wind (mph). ",
- "maximum": 300,
- "minimum": 0,
- "type": "number"
- },
- "minTempF": {
- "description": "Minimum entered temperature (°F). ",
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- "requiredHours": {
- "description": "Required uninterrupted whole hours. ",
- "maximum": 24,
- "minimum": 1,
- "type": "number"
- },
- "startHour": {
- "description": "Local working-day start hour (0–23). ",
- "maximum": 23,
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "minTempF",
- "maxTempF",
- "maxWindMph",
- "maxPrecip",
- "maxHumidity",
- "startHour",
- "endHour",
- "requiredHours",
- "crew",
- "hourlyCost",
- "fixedCost"
- ],
- "type": "object"
- },
- "mode": {
- "const": "revision",
- "type": "string"
- },
- "periods": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "endTime": {
- "format": "date-time",
- "type": "string"
- },
- "humidity": {
- "oneOf": [
- {
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "precipProbability": {
- "oneOf": [
- {
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "startTime": {
- "format": "date-time",
- "type": "string"
- },
- "temperatureF": {
- "oneOf": [
- {
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- },
- "windMph": {
- "oneOf": [
- {
- "maximum": 400,
- "minimum": 0,
- "type": "number"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "required": [
- "startTime",
- "endTime",
- "temperatureF",
- "windMph",
- "precipProbability",
- "humidity"
- ],
- "type": "object"
- },
- "maxItems": 24,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "mode",
- "figures",
- "periods",
- "earlierPeriods"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "figures": {
- "additionalProperties": false,
- "properties": {},
- "required": [],
- "type": "object"
- },
- "mode": {
- "const": "verification",
- "type": "string"
- },
- "pairs": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "forecastF": {
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- "issuedAt": {
- "format": "date-time",
- "type": "string"
- },
- "observedF": {
- "maximum": 150,
- "minimum": -150,
- "type": "number"
- },
- "validTime": {
- "format": "date-time",
- "type": "string"
- }
- },
- "required": [
- "issuedAt",
- "validTime",
- "forecastF",
- "observedF"
- ],
- "type": "object"
- },
- "maxItems": 200,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "mode",
- "figures",
- "pairs"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "figures": {
- "additionalProperties": false,
- "properties": {
- "cleanup": {
- "description": "Cleanup hours per visit. ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "contribution": {
- "description": "Contribution per PRODUCTIVE elapsed crew-hour (USD). Already net of productive labor, materials and other productive variable costs. Travel/setup/cleanup costs are deducted separately here.",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "crew": {
- "description": "Crew members travelling, setting up and cleaning up. ",
- "maximum": 10000,
- "minimum": 1,
- "type": "number"
- },
- "jobHours": {
- "description": "Required PRODUCTIVE elapsed job hours with full crew. Elapsed hours with the stated full crew, not the sum of person-hours.",
- "maximum": 100000,
- "minimum": 0.01,
- "type": "number"
- },
- "miles": {
- "description": "Round-trip vehicle miles per visit. ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "otherVisit": {
- "description": "Other incremental cost per visit (USD). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "setup": {
- "description": "Setup hours per visit. ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "travelHours": {
- "description": "Round-trip travel hours per visit. ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "vehicleRate": {
- "description": "Vehicle cost per mile (USD). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "wage": {
- "description": "Loaded cost per crew member per hour (USD). ",
- "maximum": 1000000000,
- "minimum": 0,
- "type": "number"
- },
- "windowHours": {
- "description": "Usable consecutive on-site hours per visit. A supplied scenario, not a guaranteed forecast window. Every visit assumes this same window.",
- "maximum": 10000,
- "minimum": 0.01,
- "type": "number"
- }
- },
- "required": [
- "jobHours",
- "windowHours",
- "setup",
- "cleanup",
- "travelHours",
- "miles",
- "vehicleRate",
- "crew",
- "wage",
- "contribution",
- "otherVisit"
- ],
- "type": "object"
- },
- "mode": {
- "const": "visits",
- "type": "string"
- }
- },
- "required": [
- "mode",
- "figures"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "properties": {
+ "figures": {
+ "additionalProperties": false,
+ "properties": {
+ "crew": {
+ "description": "Crew members exposed to a nonmatching hour. ",
+ "maximum": 10000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "endHour": {
+ "description": "Local working-day end hour (1–24). ",
+ "maximum": 24,
+ "minimum": 1,
+ "type": "number"
+ },
+ "fixedCost": {
+ "description": "Other fixed disruption scenario cost (USD). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "hourlyCost": {
+ "description": "Entered cost per crew member per nonmatching hour (USD). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "maxHumidity": {
+ "description": "Maximum entered relative humidity (%). ",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ "maxPrecip": {
+ "description": "Maximum entered precipitation probability (%). Probability is not rainfall amount or probability of a business loss.",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ "maxTempF": {
+ "description": "Maximum entered temperature (°F). ",
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ "maxWindMph": {
+ "description": "Maximum entered sustained wind (mph). ",
+ "maximum": 300,
+ "minimum": 0,
+ "type": "number"
+ },
+ "minTempF": {
+ "description": "Minimum entered temperature (°F). ",
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ "requiredHours": {
+ "description": "Required uninterrupted whole hours. ",
+ "maximum": 24,
+ "minimum": 1,
+ "type": "number"
+ },
+ "startHour": {
+ "description": "Local working-day start hour (0–23). ",
+ "maximum": 23,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "minTempF",
+ "maxTempF",
+ "maxWindMph",
+ "maxPrecip",
+ "maxHumidity",
+ "startHour",
+ "endHour",
+ "requiredHours",
+ "crew",
+ "hourlyCost",
+ "fixedCost"
+ ],
+ "type": "object"
+ },
+ "mode": {
+ "const": "windows",
+ "type": "string"
+ },
+ "periods": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "endTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "humidity": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "precipProbability": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "startTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "temperatureF": {
+ "oneOf": [
+ {
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "windMph": {
+ "oneOf": [
+ {
+ "maximum": 400,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "required": [
+ "startTime",
+ "endTime",
+ "temperatureF",
+ "windMph",
+ "precipProbability",
+ "humidity"
+ ],
+ "type": "object"
+ },
+ "maxItems": 48,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "mode",
+ "figures",
+ "periods"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "figures": {
+ "additionalProperties": false,
+ "properties": {
+ "baseF": {
+ "description": "Balance-point temperature (°F). ",
+ "maximum": 150,
+ "minimum": -100,
+ "type": "number"
+ },
+ "cop": {
+ "description": "Heating system COP or efficiency as a ratio. Electric resistance: 1; heat-pump COP must match conditions. Combustion efficiency is below 1; output is input-energy equivalent, not metered fuel.",
+ "maximum": 20,
+ "minimum": 0.01,
+ "type": "number"
+ },
+ "heatLoss": {
+ "description": "Entered building heat-loss coefficient (kW thermal per °F). An engineering/site-specific input. Degree-hours alone do not establish actual building energy use.",
+ "maximum": 100000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "price": {
+ "description": "Entered input-energy price (USD/kWh). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "baseF",
+ "heatLoss",
+ "cop",
+ "price"
+ ],
+ "type": "object"
+ },
+ "mode": {
+ "const": "degreehours",
+ "type": "string"
+ },
+ "periods": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "endTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "humidity": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "precipProbability": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "startTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "temperatureF": {
+ "oneOf": [
+ {
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "windMph": {
+ "oneOf": [
+ {
+ "maximum": 400,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "required": [
+ "startTime",
+ "endTime",
+ "temperatureF",
+ "windMph",
+ "precipProbability",
+ "humidity"
+ ],
+ "type": "object"
+ },
+ "maxItems": 48,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "mode",
+ "figures",
+ "periods"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "figures": {
+ "additionalProperties": false,
+ "properties": {
+ "areaSqft": {
+ "description": "Catchment area (square feet). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "capacity": {
+ "description": "Available storage capacity (US gallons). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "capture": {
+ "description": "Collectible fraction (%). ",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ "rainInches": {
+ "description": "Entered rain depth (inches). Enter a measured or explicitly chosen scenario depth. Never substitute precipitation probability.",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "rainInches",
+ "areaSqft",
+ "capture",
+ "capacity"
+ ],
+ "type": "object"
+ },
+ "mode": {
+ "const": "rainfall",
+ "type": "string"
+ }
+ },
+ "required": [
+ "mode",
+ "figures"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "figures": {
+ "additionalProperties": false,
+ "properties": {
+ "humidity": {
+ "description": "Relative humidity (%). ",
+ "maximum": 100,
+ "minimum": 0.1,
+ "type": "number"
+ },
+ "surfaceF": {
+ "description": "Measured surface temperature (°F). ",
+ "maximum": 200,
+ "minimum": -100,
+ "type": "number"
+ },
+ "temperatureF": {
+ "description": "Air temperature (°F). ",
+ "maximum": 140,
+ "minimum": -40,
+ "type": "number"
+ }
+ },
+ "required": [
+ "temperatureF",
+ "humidity",
+ "surfaceF"
+ ],
+ "type": "object"
+ },
+ "mode": {
+ "const": "drying",
+ "type": "string"
+ }
+ },
+ "required": [
+ "mode",
+ "figures"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "earlierPeriods": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "endTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "humidity": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "precipProbability": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "startTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "temperatureF": {
+ "oneOf": [
+ {
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "windMph": {
+ "oneOf": [
+ {
+ "maximum": 400,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "required": [
+ "startTime",
+ "endTime",
+ "temperatureF",
+ "windMph",
+ "precipProbability",
+ "humidity"
+ ],
+ "type": "object"
+ },
+ "maxItems": 24,
+ "minItems": 1,
+ "type": "array"
+ },
+ "figures": {
+ "additionalProperties": false,
+ "properties": {
+ "crew": {
+ "description": "Crew members exposed to a nonmatching hour. ",
+ "maximum": 10000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "endHour": {
+ "description": "Local working-day end hour (1–24). ",
+ "maximum": 24,
+ "minimum": 1,
+ "type": "number"
+ },
+ "fixedCost": {
+ "description": "Other fixed disruption scenario cost (USD). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "hourlyCost": {
+ "description": "Entered cost per crew member per nonmatching hour (USD). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "maxHumidity": {
+ "description": "Maximum entered relative humidity (%). ",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ "maxPrecip": {
+ "description": "Maximum entered precipitation probability (%). Probability is not rainfall amount or probability of a business loss.",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ "maxTempF": {
+ "description": "Maximum entered temperature (°F). ",
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ "maxWindMph": {
+ "description": "Maximum entered sustained wind (mph). ",
+ "maximum": 300,
+ "minimum": 0,
+ "type": "number"
+ },
+ "minTempF": {
+ "description": "Minimum entered temperature (°F). ",
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ "requiredHours": {
+ "description": "Required uninterrupted whole hours. ",
+ "maximum": 24,
+ "minimum": 1,
+ "type": "number"
+ },
+ "startHour": {
+ "description": "Local working-day start hour (0–23). ",
+ "maximum": 23,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "minTempF",
+ "maxTempF",
+ "maxWindMph",
+ "maxPrecip",
+ "maxHumidity",
+ "startHour",
+ "endHour",
+ "requiredHours",
+ "crew",
+ "hourlyCost",
+ "fixedCost"
+ ],
+ "type": "object"
+ },
+ "mode": {
+ "const": "revision",
+ "type": "string"
+ },
+ "periods": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "endTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "humidity": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "precipProbability": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "startTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "temperatureF": {
+ "oneOf": [
+ {
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "windMph": {
+ "oneOf": [
+ {
+ "maximum": 400,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "required": [
+ "startTime",
+ "endTime",
+ "temperatureF",
+ "windMph",
+ "precipProbability",
+ "humidity"
+ ],
+ "type": "object"
+ },
+ "maxItems": 24,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "mode",
+ "figures",
+ "periods",
+ "earlierPeriods"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "figures": {
+ "additionalProperties": false,
+ "properties": {},
+ "required": [],
+ "type": "object"
+ },
+ "mode": {
+ "const": "verification",
+ "type": "string"
+ },
+ "pairs": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "forecastF": {
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ "issuedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "observedF": {
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ "validTime": {
+ "format": "date-time",
+ "type": "string"
+ }
+ },
+ "required": [
+ "issuedAt",
+ "validTime",
+ "forecastF",
+ "observedF"
+ ],
+ "type": "object"
+ },
+ "maxItems": 200,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "mode",
+ "figures",
+ "pairs"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "figures": {
+ "additionalProperties": false,
+ "properties": {
+ "cleanup": {
+ "description": "Cleanup hours per visit. ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "contribution": {
+ "description": "Contribution per PRODUCTIVE elapsed crew-hour (USD). Already net of productive labor, materials and other productive variable costs. Travel/setup/cleanup costs are deducted separately here.",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "crew": {
+ "description": "Crew members travelling, setting up and cleaning up. ",
+ "maximum": 10000,
+ "minimum": 1,
+ "type": "number"
+ },
+ "jobHours": {
+ "description": "Required PRODUCTIVE elapsed job hours with full crew. Elapsed hours with the stated full crew, not the sum of person-hours.",
+ "maximum": 100000,
+ "minimum": 0.01,
+ "type": "number"
+ },
+ "miles": {
+ "description": "Round-trip vehicle miles per visit. ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "otherVisit": {
+ "description": "Other incremental cost per visit (USD). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "setup": {
+ "description": "Setup hours per visit. ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "travelHours": {
+ "description": "Round-trip travel hours per visit. ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "vehicleRate": {
+ "description": "Vehicle cost per mile (USD). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "wage": {
+ "description": "Loaded cost per crew member per hour (USD). ",
+ "maximum": 1000000000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "windowHours": {
+ "description": "Usable consecutive on-site hours per visit. A supplied scenario, not a guaranteed forecast window. Every visit assumes this same window.",
+ "maximum": 10000,
+ "minimum": 0.01,
+ "type": "number"
+ }
+ },
+ "required": [
+ "jobHours",
+ "windowHours",
+ "setup",
+ "cleanup",
+ "travelHours",
+ "miles",
+ "vehicleRate",
+ "crew",
+ "wage",
+ "contribution",
+ "otherVisit"
+ ],
+ "type": "object"
+ },
+ "mode": {
+ "const": "visits",
+ "type": "string"
+ }
+ },
+ "required": [
+ "mode",
+ "figures"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "figures": {
+ "additionalProperties": false,
+ "properties": {
+ "endHour": {
+ "description": "Local working-day end hour (1–24). ",
+ "maximum": 24,
+ "minimum": 1,
+ "type": "number"
+ },
+ "maxFeelsF": {
+ "description": "Maximum entered apparent temperature (°F). Illustrative screening limit. On-site WBGT, workload, clothing, acclimatization and sun exposure also matter.",
+ "maximum": 200,
+ "minimum": -150,
+ "type": "number"
+ },
+ "maxHumidity": {
+ "description": "Maximum entered relative humidity (%). ",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ "maxTempF": {
+ "description": "Maximum entered temperature (°F). ",
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ "maxWindMph": {
+ "description": "Maximum entered sustained wind (mph). ",
+ "maximum": 300,
+ "minimum": 0,
+ "type": "number"
+ },
+ "minFeelsF": {
+ "description": "Minimum entered apparent temperature (°F). Illustrative screening limit, not a universal cold-exposure or safe-work threshold.",
+ "maximum": 200,
+ "minimum": -150,
+ "type": "number"
+ },
+ "minTempF": {
+ "description": "Minimum entered temperature (°F). ",
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ "requiredHours": {
+ "description": "Required uninterrupted whole hours. ",
+ "maximum": 24,
+ "minimum": 1,
+ "type": "number"
+ },
+ "startHour": {
+ "description": "Local working-day start hour (0–23). ",
+ "maximum": 23,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "minTempF",
+ "maxTempF",
+ "maxWindMph",
+ "maxHumidity",
+ "startHour",
+ "endHour",
+ "requiredHours",
+ "minFeelsF",
+ "maxFeelsF"
+ ],
+ "type": "object"
+ },
+ "hazards": {
+ "additionalProperties": false,
+ "properties": {
+ "alerts": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "effective": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "event": {
+ "maxLength": 150,
+ "minLength": 1,
+ "type": "string"
+ },
+ "expires": {
+ "format": "date-time",
+ "type": "string"
+ }
+ },
+ "required": [
+ "event",
+ "effective",
+ "expires"
+ ],
+ "type": "object"
+ },
+ "maxItems": 50,
+ "type": "array"
+ },
+ "checkedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "available",
+ "unavailable"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "status",
+ "checkedAt",
+ "alerts"
+ ],
+ "type": "object"
+ },
+ "mode": {
+ "const": "opportunity",
+ "type": "string"
+ },
+ "periods": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "endTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "humidity": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "precipProbability": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "startTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "temperatureF": {
+ "oneOf": [
+ {
+ "maximum": 150,
+ "minimum": -150,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "windMph": {
+ "oneOf": [
+ {
+ "maximum": 400,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "required": [
+ "startTime",
+ "endTime",
+ "temperatureF",
+ "windMph",
+ "precipProbability",
+ "humidity"
+ ],
+ "type": "object"
+ },
+ "maxItems": 24,
+ "minItems": 1,
+ "type": "array"
+ },
+ "probabilityPeriods": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "endTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "precipProbability": {
+ "oneOf": [
+ {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "startTime": {
+ "format": "date-time",
+ "type": "string"
+ }
+ },
+ "required": [
+ "startTime",
+ "endTime",
+ "precipProbability"
+ ],
+ "type": "object"
+ },
+ "maxItems": 48,
+ "minItems": 1,
+ "type": "array"
+ },
+ "thermalPeriods": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "apparentTemperatureF": {
+ "oneOf": [
+ {
+ "maximum": 200,
+ "minimum": -150,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "endTime": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "startTime": {
+ "format": "date-time",
+ "type": "string"
+ }
+ },
+ "required": [
+ "startTime",
+ "endTime",
+ "apparentTemperatureF"
+ ],
+ "type": "object"
+ },
+ "maxItems": 48,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "mode",
+ "figures",
+ "periods",
+ "probabilityPeriods",
+ "thermalPeriods",
+ "hazards"
+ ],
+ "type": "object"
+ }
+]