<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="https://bim.house/spec/permit-xml/v1"
           targetNamespace="https://bim.house/spec/permit-xml/v1"
           elementFormDefault="qualified"
           version="1.0.0">

  <xs:annotation><xs:documentation>
    μBIM-Permit-XML v1 — 建築確認申請 電子受付用 XML スキーマ
    Source: https://bim.house/spec/permit-xml-v1.html
    License: MIT
    本 schema は μBIM v1 JSON から自動生成される確認申請メタデータの正規形式を定義。
  </xs:documentation></xs:annotation>

  <xs:element name="PermitApplication">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Header" type="HeaderType"/>
        <xs:element name="Applicant" type="ActorType"/>
        <xs:element name="Designer" type="DesignerType"/>
        <xs:element name="Site" type="SiteType"/>
        <xs:element name="Building" type="BuildingType"/>
        <xs:element name="ComplianceChecks" type="ComplianceType"/>
        <xs:element name="BimAttachment" type="BimAttachmentType"/>
        <xs:element name="Drawings" type="DrawingsType"/>
        <xs:element name="Signatures" type="SignaturesType" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="specVersion" type="xs:string" use="required"/>
      <xs:attribute name="formCode" type="xs:string" use="required"/>
      <xs:attribute name="lawArticle" type="xs:string"/>
      <xs:attribute name="generatedAt" type="xs:dateTime" use="required"/>
      <xs:attribute name="bimSourceUri" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="HeaderType">
    <xs:sequence>
      <xs:element name="ApplicationDate" type="xs:string"/>
      <xs:element name="AuthorityName" type="xs:string"/>
      <xs:element name="ProjectSlug" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ActorType">
    <xs:sequence>
      <xs:element name="Name" type="xs:string"/>
      <xs:element name="Address" type="xs:string" minOccurs="0"/>
      <xs:element name="Phone" type="xs:string" minOccurs="0"/>
      <xs:element name="Email" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="DesignerType">
    <xs:sequence>
      <xs:element name="OfficeName" type="xs:string"/>
      <xs:element name="OfficeRegistration" type="xs:string" minOccurs="0"/>
      <xs:element name="OfficeAddress" type="xs:string" minOccurs="0"/>
      <xs:element name="DesignerName" type="xs:string"/>
      <xs:element name="DesignerClass" type="xs:string"/>
      <xs:element name="DesignerNumber" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="SiteType">
    <xs:sequence>
      <xs:element name="Address" type="xs:string"/>
      <xs:element name="Zoning" type="xs:string"/>
      <xs:element name="SiteAreaM2" type="xs:decimal"/>
      <xs:element name="LotWidthM" type="xs:decimal"/>
      <xs:element name="LotDepthM" type="xs:decimal"/>
      <xs:element name="RoadWidthM" type="xs:decimal"/>
      <xs:element name="FireZone" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="BuildingType">
    <xs:sequence>
      <xs:element name="Name" type="xs:string"/>
      <xs:element name="Usage" type="xs:string"/>
      <xs:element name="Structure" type="xs:string"/>
      <xs:element name="FloorsAbove" type="xs:nonNegativeInteger"/>
      <xs:element name="FloorsBelow" type="xs:nonNegativeInteger"/>
      <xs:element name="BuiltAreaM2" type="xs:decimal"/>
      <xs:element name="GrossFloorAreaM2" type="xs:decimal"/>
      <xs:element name="MaxHeightM" type="xs:decimal"/>
      <xs:element name="EaveHeightM" type="xs:decimal"/>
      <xs:element name="ConstructionType">
        <xs:simpleType><xs:restriction base="xs:string">
          <xs:enumeration value="NewConstruction"/>
          <xs:enumeration value="Extension"/>
          <xs:enumeration value="Renovation"/>
          <xs:enumeration value="Relocation"/>
          <xs:enumeration value="MajorRepair"/>
          <xs:enumeration value="MajorAlteration"/>
        </xs:restriction></xs:simpleType>
      </xs:element>
      <xs:element name="ConstructionCostJPY" type="xs:nonNegativeInteger"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ComplianceType">
    <xs:sequence>
      <xs:element name="BuildingCoverage" type="CheckType"/>
      <xs:element name="FloorAreaRatio" type="CheckType"/>
      <xs:element name="NorthSlope" type="CheckType"/>
      <xs:element name="RoadSlope" type="CheckType"/>
      <xs:element name="Daylight" type="CheckType"/>
      <xs:element name="Ventilation" type="CheckType"/>
      <xs:element name="Structural" type="StructuralCheckType"/>
      <xs:element name="OverallPass" type="xs:boolean"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="CheckType">
    <xs:attribute name="limitPct" type="xs:decimal"/>
    <xs:attribute name="actualPct" type="xs:decimal"/>
    <xs:attribute name="limitHeightMm" type="xs:integer"/>
    <xs:attribute name="actualHeightMm" type="xs:integer"/>
    <xs:attribute name="requiredRatio" type="xs:decimal"/>
    <xs:attribute name="actualRatio" type="xs:decimal"/>
    <xs:attribute name="pass" type="xs:boolean" use="required"/>
  </xs:complexType>

  <xs:complexType name="StructuralCheckType">
    <xs:attribute name="pass" type="xs:boolean" use="required"/>
    <xs:attribute name="wallQuantityXPass" type="xs:boolean"/>
    <xs:attribute name="wallQuantityYPass" type="xs:boolean"/>
    <xs:attribute name="nValueMaxKN" type="xs:decimal"/>
    <xs:attribute name="storyDriftRatio" type="xs:decimal"/>
  </xs:complexType>

  <xs:complexType name="BimAttachmentType">
    <xs:sequence>
      <xs:element name="Format" type="xs:string"/>
      <xs:element name="Sha256" type="xs:string" minOccurs="0"/>
      <xs:element name="CanonicalUri" type="xs:anyURI"/>
      <xs:element name="ElementCount" type="xs:nonNegativeInteger"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="DrawingsType">
    <xs:sequence>
      <xs:element name="Drawing" maxOccurs="unbounded">
        <xs:complexType>
          <xs:attribute name="type" type="xs:string" use="required"/>
          <xs:attribute name="uri" type="xs:anyURI" use="required"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="SignaturesType">
    <xs:sequence>
      <xs:element name="SignaturePolicy" type="xs:anyURI" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>