addedInput schema / properties / criteria / properties / branches
Added value: +{
+ "description": "Alternative strategies; nested registry values stay in canonical units.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "criteria": {
+ "additionalProperties": false,
+ "properties": {
+ "assessed_value": {
+ "additionalProperties": false,
+ "properties": {
+ "max": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "min": {
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "building_use": {
+ "additionalProperties": false,
+ "description": "What the lot is used for today, read from the assessor's use code: office, mixed_use, retail, hospitality, industrial, multifamily, two_to_four_family, single_family, institutional, civic, religious, parking, vacant_land, other. \"Commercial buildings, not houses or churches\" is { any_of: [\"office\", \"mixed_use\", \"retail\"] } or { none_of: [\"single_family\", \"two_to_four_family\", \"religious\", \"civic\"] }.",
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 20,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 20,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "contamination_risk": {
+ "additionalProperties": false,
+ "description": "true: a gas station or auto-service business (repair, body shop, car wash) is mapped on the lot. { is: false } excludes those lots. A risk flag from OpenStreetMap and city business licences, not a site investigation: it misses former and unmapped businesses.",
+ "properties": {
+ "is": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "is"
+ ],
+ "type": "object"
+ },
+ "existing_coverage_pct": {
+ "additionalProperties": false,
+ "description": "Building footprint area on the lot as a percentage of lot area, 0-100. An underbuilt screen is { max: 20 }. Footprints can be years old: check the city honesty note.",
+ "properties": {
+ "max": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "min": {
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "existing_use_class": {
+ "additionalProperties": false,
+ "description": "What stands on the lot: place_of_worship (church, temple, mosque, synagogue…), fuel_station, auto_service (repair, body, car wash), auto_sales (car dealer), else vacant, surface_parking or built. \"Vacant lots or surface parking\" is { any_of: [\"vacant\", \"surface_parking\"] }; \"gas stations\" is { any_of: [\"fuel_station\"] }; \"church sites\" is { any_of: [\"place_of_worship\"] }. Vacant means no building over 20 m² in any footprint source and no assessed building worth over 20% of the land. Québec lots without footprints use the assessment roll land-use code (CUBF 9100 = vacant). A mapped business on the lot wins over the footprint class. Fuel and auto-service sites are a contamination risk flag, not a site investigation.",
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "exterior_material": {
+ "additionalProperties": false,
+ "description": "The assessor's primary exterior wall as a family: masonry, wood, siding, stucco, concrete, metal, glass, other. \"Brick buildings\" is { any_of: [\"masonry\"] }.",
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "frequent_transit_distance": {
+ "additionalProperties": false,
+ "description": "Metres from the lot line to the nearest frequent bus stop or rapid-transit station.",
+ "properties": {
+ "max": {
+ "maximum": 5000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "min": {
+ "maximum": 5000,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "hydrant_distance": {
+ "additionalProperties": false,
+ "description": "Metres from the lot line to the nearest fire hydrant.",
+ "properties": {
+ "max": {
+ "maximum": 5000,
+ "minimum": 0,
+ "type": "number"
+ },
+ "min": {
+ "maximum": 5000,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "improvement_land_ratio": {
+ "additionalProperties": false,
+ "description": "Building (improvement) value divided by land value, assessed or appraised, as a ratio: 0.25 = the building is worth a quarter of the land. A teardown screen is { max: 0.25 }.",
+ "properties": {
+ "max": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "min": {
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "lot_area": {
+ "additionalProperties": false,
+ "properties": {
+ "max": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "min": {
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "min_homes": {
+ "additionalProperties": false,
+ "properties": {
+ "min": {
+ "maximum": 1000,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "named_area": {
+ "additionalProperties": false,
+ "properties": {
+ "any_of": {
+ "items": {
+ "format": "uuid",
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
+ "type": "string"
+ },
+ "maxItems": 200,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "ocp_above_zoning": {
+ "additionalProperties": false,
+ "description": "true: the lot's Official Community Plan designation allows more housing than its current zone (both ranked 1 rural, 2 low density, 3 medium density, 4 high density or mixed-use centre): a rezoning candidate. { is: false } keeps lots where both are ranked and the OCP is not higher. Lots with an unranked zone or designation, no zone, or no designation match neither. A planning signal: a rezoning consistent with the OCP is more likely to be supported, but this is not a rezoning approval or the density zoning permits today.",
+ "properties": {
+ "is": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "is"
+ ],
+ "type": "object"
+ },
+ "overlay": {
+ "additionalProperties": false,
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 20,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 20,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "ownership_form": {
+ "additionalProperties": false,
+ "description": "Ownership form: fee_simple (land title), strata_condo, co_op, leasehold, mixed. \"Land title only\" is { none_of: [\"strata_condo\", \"co_op\", \"leasehold\", \"mixed\"] }, which keeps lots whose form is unknown; any_of drops them.",
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "permitted_use": {
+ "additionalProperties": false,
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 50,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "place_of_worship": {
+ "additionalProperties": false,
+ "description": "true: a church, temple, mosque, synagogue or other place of worship is mapped on the lot (OpenStreetMap, city heritage registers). { is: false } excludes those lots. Same lots as existing_use_class place_of_worship.",
+ "properties": {
+ "is": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "is"
+ ],
+ "type": "object"
+ },
+ "register_status": {
+ "additionalProperties": false,
+ "description": "Historic register status: individually_listed, contributing, non_contributing, in_district (inside a register district, building not yet mapped), not_listed. \"On the register\" is { any_of: [\"individually_listed\", \"contributing\"] }. Register status is a research lead, not tax-credit eligibility. The federal 20% credit needs a certified historic structure; building age alone qualifies for nothing (the 10% pre-1936 credit was repealed in 2017).",
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "stories": {
+ "additionalProperties": false,
+ "description": "Above-grade stories: the assessor count where recorded (half stories are decimals, 1.5), otherwise estimated from building height at 3 m per storey. \"1-2 story\" is { max: 2 }.",
+ "properties": {
+ "max": {
+ "maximum": 200,
+ "minimum": 0,
+ "type": "number"
+ },
+ "min": {
+ "maximum": 200,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "street": {
+ "additionalProperties": false,
+ "description": "Street names as the lot address carries them, upper case with the suffix abbreviated: \"STATE ST\", \"BANK ST\". { any_of: [...] } keeps lots on those streets. Matches the lot's address, not every street it touches: a corner lot counts once.",
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 50,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 50,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "subdivision_yield": {
+ "additionalProperties": false,
+ "description": "Lot area divided by the zone's minimum lot area: how many minimum-size lots the parcel could hold by area. \"Could be subdivided\" is { min: 2 }; \"into 3 lots\" is { min: 3 }. Ignores frontage, streets and lot shape: a candidate, not a subdivision approval.",
+ "properties": {
+ "max": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "min": {
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "titled_unit_count": {
+ "additionalProperties": false,
+ "description": "Titled units on the parcel: 1 for a land-title lot, the strata unit count otherwise.",
+ "properties": {
+ "max": {
+ "maximum": 100000,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "min": {
+ "maximum": 100000,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "typology": {
+ "additionalProperties": false,
+ "description": "Current site use from site_typologies, not what can be built. Exact typology IDs; sector-only lots do not match.",
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 50,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 50,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "use_sector": {
+ "additionalProperties": false,
+ "description": "Current site use from site_typologies, not what can be built. Sector IDs; includes sector-only assignments.",
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 50,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 50,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "year_built": {
+ "additionalProperties": false,
+ "description": "Year the main building was built, inclusive bounds.",
+ "properties": {
+ "max": {
+ "maximum": 2100,
+ "minimum": 1600,
+ "type": "integer"
+ },
+ "min": {
+ "maximum": 2100,
+ "minimum": 1600,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "zone_code": {
+ "additionalProperties": false,
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 50,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "zone_family": {
+ "additionalProperties": false,
+ "description": "The zone's dominant use: residential, mixed, commercial, industrial, public, recreation, agricultural, forest. \"Zoned residential or mixed\" is { any_of: [\"residential\", \"mixed\"] }. Québec zones read the zone letter (H, M, C, I, P/U, R, A, F); other zones a family classified from the zone name and purpose. The family names the dominant use; the bylaw still decides which uses are permitted.",
+ "properties": {
+ "any_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ },
+ "none_of": {
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 10,
+ "type": "array"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "type": "object"
+ },
+ "key": {
+ "pattern": "^[a-z][a-z0-9_]{0,39}$",
+ "type": "string"
+ },
+ "label": {
+ "maxLength": 60,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "key",
+ "label",
+ "criteria"
+ ],
+ "type": "object"
+ },
+ "maxItems": 6,
+ "type": "array"
+}