{
  "id": "#byggnad-1.0.json",
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Byggnad 1.0",
  "$ref": "#/definitions/byggnadFeatureCollection",
  "definitions": {
    "byggnadFeatureCollection": {
      "type": "object",
      "allOf": [
        {
          "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/featurecollection"
        },
        {
          "properties": {
            "feature:mediatyp": {
              "type": "string",
              "enum": [
                "application/vnd.lm.byggnad.v1+json"
              ]
            },
            "features": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "$ref": "#/definitions/byggnadFeature"
                  },
                  {
                    "$ref": "#/definitions/byggnadsdelFeature"
                  },
                  {
                    "$ref": "#/definitions/begransningsytaFeature"
                  },
                  {
                    "$ref": "#/definitions/solidByggnadsdelFeature"
                  },
                  {
                    "$ref": "#/definitions/byggnadstillbehorFeature"
                  },
                  {
                    "$ref": "#/definitions/andamalsenhetFeature"
                  },
                  {
                    "$ref": "#/definitions/planFeature"
                  }
                ]
              }
            }
          },
          "required": [
            "feature:mediatyp"
          ]
        }
      ]
    },

    "byggnadFeature": {
      "type": "object",
      "allOf": [
        {
          "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/feature"
        },
        {
          "properties": {
            "geometry": {
              "type": "null"
            },
            "properties": {
              "$ref": "#/definitions/byggnad"
            }
          }
        }
      ]
    },
    "utbytesobjekt": {
      "type": "object",
      "properties": {
        "objektidentitet": {
          "$ref": "#/definitions/uuid"
        },
        "objektversion": {
          "type": "integer"
        },
        "versionGiltigFran": {
          "type": "string",
          "format": "date-time"
        },
        "versionGiltigTill": {
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "objektidentitet",
        "versionGiltigFran"
      ]
    },
    "byggnad": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/utbytesobjekt"
        },
        {
          "properties": {
            "feature:typ": {
              "type": "string",
              "enum": [
                "byggnad"
              ]
            },
            "andamalskatalogreferens": {
              "$ref": "#/definitions/kod"
            },
            "indelningsgrund": {
              "$ref": "#/definitions/indelningsgrundByggnadsdelar"
            },
            "terrangskarning": {
              "$ref": "#/definitions/geometribeskrivningByggnad"
            },
            "fritidshus": {
              "type": "boolean"
            },
            "datumNybyggnad": {
              "$ref": "#/definitions/datum"
            },
            "datumNybyggnadTaxering": {
              "$ref": "#/definitions/datum"
            },
            "datumTillbyggnad": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/datum"
              }
            },
            "datumAndring": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/datum"
              }
            },
            "alternativGeometri": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/alternativGeometri"
              }
            },
            "coClass": {
              "$ref": "#/definitions/coClass"
            },
            "forfallen": {
              "type": "boolean"
            },
            "BALByggnad": {
              "type": "boolean",
              "default": false
            }
          },
          "required": [
            "feature:typ",
            "andamalskatalogreferens",
            "indelningsgrund"
          ]
        }
      ]
    },
    "geometrimetadataByggnad": {
      "type": "object",
      "allOf": [
        {
          "$ref": "http://namespace.lantmateriet.se/distribution/geodatakatalog/geometri/geometrimetadata-2.1.0.json"
        },
        {
          "properties": {
            "ansvarigOrganisation": {
              "$ref": "#/definitions/organisation"
            },
            "utforandeOrganisation": {
              "$ref": "#/definitions/organisation"
            }
          }
        }
      ]
    },
    "organisation": {
      "type": "object",
      "anyOf": [
        {
          "required": [
            "organisationsnamn"
          ]
        },
        {
          "required": [
            "organisationsnummer"
          ]
        }
      ],
      "properties": {
        "organisationsnamn": {
          "type": "string"
        },
        "organisationsnummer": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "alternativGeometri": {
      "type": "object",
      "properties": {
        "alternativGeometri": {
          "type": "string"
        },
        "referens": {
          "$ref": "#/definitions/referens"
        },
        "format": {
          "$ref": "#/definitions/formatByggnad"
        },
        "beskrivningAvFormat": {
          "type": "string"
        },
        "typ": {
          "$ref": "#/definitions/typAvAlternativGeometriByggnad"
        }
      },
      "additionalProperties": false
    },

    "byggnadsdelFeature": {
      "type": "object",
      "allOf": [
        {
          "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/feature"
        },
        {
          "properties": {
            "geometry": {
              "type": "null"
            },
            "properties": {
              "$ref": "#/definitions/byggnadsdel"
            }
          }
        }
      ]
    },
    "byggnadsdel": {
      "type": "object",
      "properties": {
        "feature:typ": {
          "type": "string",
          "enum": [
            "byggnadsdel"
          ]
        },
        "objektidentitet": {
          "$ref": "#/definitions/uuid"
        },
        "byggnad": {
          "$ref": "#/definitions/uuid"
        },
        "variantNSLOD": {
          "$ref": "#/definitions/variantNSLOD"
        },
        "absolutHojdBotten": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/absolutHojdBotten"
          }
        },
        "absolutHojdTak": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/absolutHojdTak"
          }
        },
        "underMarkytan": {
          "type": "boolean"
        },
        "underAnnatObjekt": {
          "type": "boolean"
        },
        "planeradByggnadsdel": {
          "type": "boolean"
        },
        "kallare": {
          "type": "boolean"
        },
        "vind": {
          "type": "boolean"
        },
        "takvinkel": {
          "type": "number",
          "minimum": 0,
          "maximum": 90
        },
        "taktyp": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/taktyp"
          }
        },
        "antalPlanOverMark": {
          "type": "integer"
        },
        "coClass": {
          "$ref": "#/definitions/coClass"
        }
      },
      "required": [
        "feature:typ",
        "byggnad",
        "objektidentitet",
        "variantNSLOD"
      ],
      "additionalProperties": false
    },

    "begransningsytaFeature": {
      "type": "object",
      "allOf": [
        {
          "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/feature"
        },
        {
          "properties": {
            "geometry": {
              "oneOf": [
                {
                  "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/polygon"
                },
                {
                  "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/multipolygon"
                }
              ]
            },
            "properties": {
              "oneOf": [
                {
                  "$ref": "#/definitions/takyta"
                },
                {
                  "$ref": "#/definitions/vaggyta"
                },
                {
                  "$ref": "#/definitions/bottenyta"
                },
                {
                  "$ref": "#/definitions/stangningsyta"
                },
                {
                  "$ref": "#/definitions/innertaksytaUtomhus"
                },
                {
                  "$ref": "#/definitions/golvytaUtomhus"
                }
              ]
            }
          }
        }
      ]
    },
    "begransningsyta": {
      "type": "object",
      "properties": {
        "feature:typ": {
          "type": "string"
        },
        "objektidentitet": {
          "$ref": "#/definitions/uuid"
        },
        "byggnadsdel": {
          "$ref": "#/definitions/uuid"
        },
        "solidByggnadsdel": {
          "$ref": "#/definitions/uuid"
        },
        "geometribeskrivning": {
          "$ref": "#/definitions/geometribeskrivningByggnad"
        },
        "coClass": {
          "$ref": "#/definitions/coClass"
        }
      },
      "required": [
        "feature:typ",
        "objektidentitet",
        "byggnadsdel",
        "geometribeskrivning"
      ]
    },
    "takyta": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/begransningsyta"
        },
        {
          "properties": {
            "feature:typ": {
              "type": "string",
              "enum": [
                "takyta"
              ]
            },
            "takdel": {
              "$ref": "#/definitions/takdel"
            }
          },
          "required": [
            "takdel"
          ]
        }
      ]
    },
    "vaggyta": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/begransningsyta"
        },
        {
          "properties": {
            "feature:typ": {
              "type": "string",
              "enum": [
                "väggyta"
              ]
            },
            "planlage": {
              "$ref": "#/definitions/planlage"
            },
            "lutandeVaggyta": {
              "type": "boolean"
            }
          },
          "required": [
            "planlage"
          ]
        }
      ]
    },
    "bottenyta": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/begransningsyta"
        },
        {
          "properties": {
            "feature:typ": {
              "type": "string",
              "enum": [
                "bottenyta"
              ]
            },
            "planlage": {
              "$ref": "#/definitions/planlage"
            },
            "hojdlageBotten": {
              "$ref": "#/definitions/hojdlageBotten"
            }
          },
          "required": [
            "planlage"
          ]
        }
      ]
    },
    "stangningsyta": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/begransningsyta"
        },
        {
          "properties": {
            "feature:typ": {
              "type": "string",
              "enum": [
                "stängningsyta"
              ]
            }
          }
        }
      ]
    },
    "innertaksytaUtomhus": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/begransningsyta"
        },
        {
          "properties": {
            "feature:typ": {
              "type": "string",
              "enum": [
                "innertaksyta utomhus"
              ]
            },
            "lagstaVaningOverMark": {
              "type": "boolean"
            }
          }
        }
      ]
    },
    "golvytaUtomhus": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/begransningsyta"
        },
        {
          "properties": {
            "feature:typ": {
              "type": "string",
              "enum": [
                "golvyta utomhus"
              ]
            }
          }
        }
      ]
    },

    "solidByggnadsdelFeature": {
      "type": "object",
      "allOf": [
        {
          "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/feature"
        },
        {
          "properties": {
            "geometry": {
              "type": "null"
            },
            "properties": {
              "$ref": "#/definitions/solidByggnadsdel"
            }
          }
        }
      ]
    },
    "solidByggnadsdel": {
      "type": "object",
      "properties": {
        "feature:typ": {
          "type": "string",
          "enum": [
            "solid byggnadsdel"
          ]
        },
        "objektidentitet": {
          "$ref": "#/definitions/uuid"
        },
        "byggnadsdel": {
          "$ref": "#/definitions/uuid"
        },
        "coClass": {
          "$ref": "#/definitions/coClass"
        }
      },
      "required": [
        "feature:typ",
        "objektidentitet",
        "byggnadsdel"
      ],
      "additionalProperties": false
    },

    "byggnadstillbehorFeature": {
      "type": "object",
      "allOf": [
        {
          "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/feature"
        },
        {
          "properties": {
            "geometry": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/geometry"
                }
              ]
            },
            "properties": {
              "$ref": "#/definitions/byggnadstillbehor"
            }
          }
        }
      ]
    },
    "byggnadstillbehor": {
      "type": "object",
      "properties": {
        "feature:typ": {
          "type": "string",
          "enum": [
            "byggnadstillbehör"
          ]
        },
        "objektidentitet": {
          "$ref": "#/definitions/uuid"
        },
        "byggnad": {
          "$ref": "#/definitions/uuid"
        },
        "tillbehorstyp": {
          "$ref": "#/definitions/tillbehorstyp"
        },
        "matvardArea": {
          "type": "boolean"
        },
        "planeratByggnadstillbehor": {
          "type": "boolean"
        },
        "variantNSLOD": {
          "$ref": "#/definitions/variantNSLODByggnadstillbehor"
        },
        "geometribeskrivning": {
          "$ref": "#/definitions/geometribeskrivningByggnad"
        },
        "coClass": {
          "$ref": "#/definitions/coClass"
        }
      },
      "required": [
        "feature:typ",
        "objektidentitet",
        "byggnad",
        "tillbehorstyp"
      ],
      "additionalProperties": false
    },

    "andamalsenhetFeature": {
      "type": "object",
      "allOf": [
        {
          "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/feature"
        },
        {
          "properties": {
            "geometry": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/geometry"
                }
              ]
            },
            "properties": {
              "$ref": "#/definitions/andamalsenhet"
            }
          }
        }
      ]
    },
    "andamalsenhet": {
      "type": "object",
      "properties": {
        "feature:typ": {
          "type": "string",
          "enum": [
            "ändamålsenhet"
          ]
        },
        "objektidentitet": {
          "$ref": "#/definitions/uuid"
        },
        "byggnad": {
          "$ref": "#/definitions/uuid"
        },
        "byggnadstillbehor": {
          "$ref": "#/definitions/uuid"
        },
        "andamalskatalogreferens": {
          "$ref": "#/definitions/kod"
        },
        "statusperiod": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/byggnadsstatusperiod"
          }
        },
        "bygglovsbefriad": {
          "type": "boolean"
        },
        "byggnadsarea": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999.9,
          "multipleOf": 0.1
        },
        "bruttoarea": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999.9,
          "multipleOf": 0.1
        },
        "oppenarea": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999.9,
          "multipleOf": 0.1
        },
        "uppvarmdArea": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999.9,
          "multipleOf": 0.1
        },
        "diarienummer": {
          "type": "string"
        },
        "referens": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/referens"
          }
        },
        "geometribeskrivning": {
          "$ref": "#/definitions/geometribeskrivningByggnad"
        },
        "coClass": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/coClass"
          }
        }
      },
      "required": [
        "feature:typ",
        "byggnad",
        "objektidentitet",
        "andamalskatalogreferens"
      ],
      "additionalProperties": false
    },
    "byggnadsstatusperiod": {
      "type": "object",
      "properties": {
        "status": {
          "$ref": "#/definitions/byggnadsstatus"
        },
        "datumFran": {
          "$ref": "#/definitions/datum"
        },
        "datumTill": {
          "$ref": "#/definitions/datum"
        }
      },
      "required": [
        "status",
        "datumFran"
      ],
      "additionalProperties": false
    },
    "byggnadsstatus": {
      "type": "string",
      "enum": [
        "preliminär",
        "planerad",
        "under uppförande",
        "gällande",
        "riven"
      ]
    },

    "planFeature": {
      "type": "object",
      "allOf": [
        {
          "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/feature"
        },
        {
          "properties": {
            "geometry": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "http://namespace.lantmateriet.se/distribution/produkter/geojson/v1.1/geojson-1.1.json#/definitions/geometry"
                }
              ]
            },
            "properties": {
              "$ref": "#/definitions/plan"
            }
          }
        }
      ]
    },
    "plan": {
      "type": "object",
      "properties": {
        "feature:typ": {
          "type": "string",
          "enum": [
            "plan"
          ]
        },
        "objektidentitet": {
          "$ref": "#/definitions/uuid"
        },
        "byggnad": {
          "$ref": "#/definitions/uuid"
        },
        "andamalsenhet": {
          "$ref": "#/definitions/uuid"
        },
        "plannummer": {
          "type": "integer"
        },
        "absolutHojdvardePlan": {
          "type": "number",
          "minimum": -20,
          "maximum": 2000
        },
        "geometribeskrivning": {
          "$ref": "#/definitions/geometribeskrivningByggnad"
        }
      },
      "required": [
        "objektidentitet",
        "byggnad",
        "plannummer"
      ],
      "additionalProperties": false
    },

    "indelningsgrundByggnadsdelar": {
      "type": "string",
      "enum": [
        "höjd",
        "ingen",
        "okänd"
      ]
    },
    "formatByggnad": {
      "type": "string",
      "enum": [
        "CityGML",
        "IFC",
        "JSON",
        "PDF"
      ]
    },
    "typAvAlternativGeometriByggnad": {
      "type": "string",
      "enum": [
        "3D-modell i LOD3",
        "BIM/CAD-data",
        "byggnadens area (BYA)",
        "ritningar"
      ]
    },

    "variantNSLOD": {
      "type": "string",
      "enum": [
        "0a",
        "0b",
        "0c",
        "2.1a",
        "2.1b",
        "2.2a",
        "2.2b",
        "2.3"
      ]
    },
    "planlage": {
      "type": "string",
      "enum": [
        "fasad",
        "takkant",
        "byggnadsarea (BYA)",
        "husgrund",
        "illustrativt läge",
        "okänt"
      ]
    },
    "absolutHojdBotten": {
      "type": "object",
      "properties": {
        "hojdvarde": {
          "type": "number",
          "minimum": -20,
          "maximum": 2000
        },
        "hojdlageBotten": {
          "$ref": "#/definitions/hojdlageBotten"
        },
        "absolutLagesosakerhetHojd": {
          "type": "number"
        },
        "hojdsystem": {
          "$ref": "http://namespace.lantmateriet.se/distribution/geodatakatalog/geometri/geometri-2.0.json#/definitions/hojdsystem"
        },
        "geometrimetadata": {
          "$ref": "#/definitions/geometrimetadataByggnad"
        }
      },
      "required": [
        "hojdvarde",
        "hojdlageBotten",
        "absolutLagesosakerhetHojd",
        "hojdsystem",
        "geometrimetadata"
      ],
      "additionalProperties": false
    },
    "absolutHojdTak": {
      "type": "object",
      "properties": {
        "hojdvarde": {
          "type": "number",
          "minimum": -20,
          "maximum": 2000
        },
        "hojdlageTak": {
          "$ref": "#/definitions/hojdlageTak"
        },
        "absolutLagesosakerhetHojd": {
          "type": "number"
        },
        "hojdsystem": {
          "$ref": "http://namespace.lantmateriet.se/distribution/geodatakatalog/geometri/geometri-2.0.json#/definitions/hojdsystem"
        },
        "geometrimetadata": {
          "$ref": "#/definitions/geometrimetadataByggnad"
        }
      },
      "required": [
        "hojdvarde",
        "hojdlageTak",
        "absolutLagesosakerhetHojd",
        "hojdsystem",
        "geometrimetadata"
      ],
      "additionalProperties": false
    },
    "takdel": {
      "type": "string",
      "enum": [
        "hela takytan",
        "takyta utan överhäng",
        "överhäng"
      ]
    },
    "taktyp": {
      "type": "string",
      "enum": [
        "brutet pulpettak",
        "bågtak",
        "dubbelkrökt tak",
        "halvvalmat tak",
        "kupoltak",
        "kägeltak",
        "mansardtak",
        "platt tak",
        "pulpettak",
        "pyramidtak",
        "sadeltak",
        "sågtandtak",
        "tälttak",
        "valmat tak"
      ]
    },
    "hojdlageBotten": {
      "type": "string",
      "enum": [
        "entrénivå",
        "färdigt golv",
        "sockelhöjd",
        "husgrund",
        "markens medelnivå",
        "markhöjd, högsta",
        "markhöjd, lägsta",
        "nivå källargolv",
        "nivå VA-anslutning",
        "byggnadsdelens lägsta höjd",
        "höjdläge på byggnadsverk",
        "fiktivt höjdläge under marknivå",
        "illustrativt läge",
        "okänt"
      ]
    },
    "hojdlageTak": {
      "type": "string",
      "enum": [
        "totalhöjd",
        "nockhöjd",
        "takkant",
        "takkant, högsta",
        "takkant, lägsta",
        "skärning fasad/tak",
        "skärning fasad/tak, högsta",
        "skärning fasad/tak, lägsta",
        "takets medelhöjd",
        "okänt"
      ]
    },
    "tillbehorstyp": {
      "type": "string",
      "enum": [
        "altan",
        "balkong",
        "lastkaj",
        "loftgång",
        "mast/antenn",
        "ramp",
        "räcke",
        "skorsten",
        "skärmtak",
        "solenergianläggning",
        "takfönster",
        "takkupa",
        "teknisk försörjning",
        "trappa"
      ]
    },
    "variantNSLODByggnadstillbehor": {
      "type": "string",
      "enum": [
        "0",
        "2.1",
        "2.2",
        "2.3"
      ]
    },
    "geometribeskrivningByggnad": {
      "type": "object",
      "properties": {
        "geometri": {
          "$ref": "http://namespace.lantmateriet.se/distribution/geodatakatalog/geometri/geometri-2.0.json"
        },
        "geometrimetadata": {
          "$ref": "#/definitions/geometrimetadataByggnad"
        }
      },
      "additionalProperties": false
    },

    "kod": {
      "type": "object",
      "properties": {
        "kod": {
          "type": "string"
        },
        "version": {
          "type": "integer"
        }
      },
      "required": [
        "kod"
      ],
      "additionalProperties": false
    },
    "coClass": {
      "type": "object",
      "properties": {
        "coClassId": {
          "type": "string"
        },
        "coClassKod": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string"
          }
        },
        "coClassVersion": {
          "type": "string"
        }
      },
      "required": [
        "coClassId",
        "coClassKod",
        "coClassVersion"
      ],
      "additionalProperties": false
    },
    "referens": {
      "type": "object",
      "properties": {
        "namnrymd": {
          "type": "string",
          "format": "uri"
        },
        "identitet": {
          "$ref": "#/definitions/uuid"
        },
        "lank": {
          "type": "string",
          "format": "uri"
        }
      },
      "additionalProperties": false
    },
    "uuid": {
      "type": "string",
      "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
    },
    "datum": {
      "type": "string",
      "format": "date",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
    }
  }
}