설계품질검토 대상법규   |   조항단위 법규   |   문장단위 법규   |   KBimCode-Assess 연동모듈   |   KBimCode DB   |   주어부 - 객체,속성 DB   |   서술부 - 함수 DB   |   관계부 - 문장관계   |   룰셋생성모듈   |  
(2025-06-28 기준) 설계품질검토용 건축법 및 관련법규 - KBIMCode (문장단위)
      KBIMCode - KBimAssess Python Code     KBIMCode - 체크리스트 단위     KBIMCode - 조항단위
    1      
1 / 1 page Total 2500 / 4000 records
Select
ALL
None
#
Law
Jo
JO Name
HANG
HO
MOK
Text
Search!
1
건축물의 구조기준 등에 관한 규칙 제 43조 4 항

④제3항의 규정에 의한 세로철근의 양단은 각각 그 철근지름의 40배 이상을 기초판 부분이나 테두리보 또는 바닥판에 정착시켜야 한다.





//건축물의 구조기준 등에 관한 규칙 43조 (내력벽) 4항

Check(RSSB_43_4){

	getResult(RSSB_41_1) = TRUE AND getResult(RSSB_3_3) = TRUE AND KS

}



KS{

   RD>=40*getObjectProperty(RSSB_43_3_myReinforcement.diameter)

      

    isInstalled( RSSB_43_3_myReinforcement.BothEndSides, FoundationPlate , RD, "정착")=True



    OR  isInstalled( RSSB_43_3_myReinforcement.BothEndSides, WallGirder, RD, "정착")=True



      OR  isInstalled( RSSB_43_3_myReinforcement.BothEndSides, FloorSlab   , RD, "정착")=True



} 




Python Code 변환 예정



2
건축물의 구조기준 등에 관한 규칙 제 44조

제44조(테두리보) 보강블록구조인 내력벽의 각층의 벽 위에는 춤이 벽두께의 1.5배 이상인 철근콘크리트구조의 테두리보를 설치하여야 한다. 다만, 최상층의 벽으로서 그 벽위에 철근콘크리트구조의 옥상바닥판이 있는 경우에는 그러하지 아니하다.





//건축물의 구조기준 등에 관한 규칙 44조 (테두리보)



Check(RSSB_44){

     getResult(RSSB_41_1) = TRUE AND getResult(RSSB_3_3) = TRUE AND IF !CS THEN  KS

}



!CS{

  Wall myWall{

   isInstalled(Wall, TopFloor)=True

  } 

  

  FloorSlab myFloorSlab{
isInstalled(FloorSlab, Rooftop) = TRUE
       getObjectProperty(FloorSlab.Structure.materialType)="ReinforcedConcrete"

  }

   isInstalled(myFloorSlabOfRooftop, myWall, Top)=True   

    } 



KS{

   Wall myWall{

     isObjectProperty(Wall.isLoadBearingWall)=True

     isObjectProperty(Wall.Structure.isMansoryStructure)= True

   }



   WD=getObjectProperty(myWall.depth)

   

   WallGirder myWallGirder{   

     getObjectProperty(WallGirder.height)>=1.5*WD

     getObjectProperty(myWallGrider.Structure.materialType)="ReinforcedConcrete"

   }

   

    isInstalled(myWallGrider, myWall, Top)=True



  

} 




Python Code 변환 예정



3
건축물의 구조기준 등에 관한 규칙 제 9조의3조 1 항

① 주요구조부(바닥·지붕틀 및 주계단은 제외한다. 이하 이 조에서 같다)가 목구조인 건축물은 지붕높이 18미터 이하, 처마높이 15미터 이하 및 연면적 3,000제곱미터 이하로 하여야 한다. 다만, 스프링클러를 설치하는 경우에는 연면적을 6,000제곱미터까지 허용할 수 있다.





//건축물의 구조기준 등에 관한 규칙 9조의3 (건축물의 규모제한) 1항

Check(RSSB_9-3_1){

        IF (CS1 THEN KS1) OR (CS2 THEN KS2)

}

	MainStructuralPart myMainStructuralPart1{
	getObject(FloorSlab) OR getObject(RoofTruss)
	}
MainStructuralPart myMainStructuralPart2{
	MainStructuralPart != myMainStructuralPart1
	}

CS1{

	isInstalled(SprinklerSystem) != TRUE

	getObjectProperty(myMainStructuralPart2.Structure.materialType) = "Timber"

}

KS1{

	getObjectVerticalDistance(FloorSlab, Roof) <= 18m

	getObjectVerticalDistance(FloorSlab, Eave) <= 15m

	getGrossFloorArea() <= 3000m2

}

CS2{

	isInstalled(SprinklerSystem) = TRUE

	getObjectProperty(myMainStructuralPart2.Structure.materialType) = "Timber"

}

KS1{

	getObjectVerticalDistance(FloorSlab, Roof) <= 18m

	getObjectVerticalDistance(FloorSlab, Eave) <= 15m

	getGrossFloorArea() <= 6000m2

} 




Python Code 변환 예정



4
건축물의 구조기준 등에 관한 규칙 제 9조의3조 2 항

② 주요구조부가 비보강조적조인 건축물은 지붕높이 15미터 이하, 처마높이 11미터 이하 및 3층 이하로 하여야 한다.





//건축물의 구조기준 등에 관한 규칙 9조의3 (건축물의 규모제한) 2항
Check(RSSB_9-3_2){
        IF CS THEN KS
}
CS{
	isObjectProperty(MainStructuralPart.Structure.isUnreinforcedMansoryStructure) = TRUE
}
KS{
	getObjectVerticalDistance(FloorSlab, Roof) <= 15m
	getObjectVerticalDistance(FloorSlab, Eave) <= 11m	
	getBuildingStoriesCount() <= 3
} 




Python Code 변환 예정



5
건축물의 설비기준 등에 관한 규칙 제 13조 1 항 6호

6. 오피스텔의 경우에는 난방구획마다 내화구조로 된 벽·바닥과 갑종방화문으로 된 출입문으로 구획할 것





//	건축물의 설비기준 등에 관한 규칙 13조 (개별난방설비) 1항 6호

Check(RFB_13_1_6){

	IF CS THEN KS

}



CS{

	getBuildingUsage() = "Officetel"

}



KS{

	Wall myWall{

		isObjectProperty(Wall.isfireResistantStructure)

	}



	FloorSlab myFloorSlab{

		isObjectProperty(FloorSlab.isFireResistantStructure) = TRUE

	}



	Door myDoor{

		isObjectProperty(Door.isStrictFireproofDoor) = TRUE

	}


Zone myZone{
isObjectProperty(Zone.isHeatingSection) = TRUE
}
	isPartitioned(myZone, myWall) = TRUE

	OR isPartitioned(myZone, myFloorSlab) = TRUE

	OR isPartitioned(myZone, myDoor) = TRUE

} 




Python Code 변환 예정



6
건축물의 설비기준 등에 관한 규칙 제 13조 2 항

②가스보일러에 의한 난방설비를 설치하고 가스를 중앙집중공급방식으로 공급하는 경우에는 제1항의 규정에 불구하고 가스관계법령이 정하는 기준에 의하되, 오피스텔의 경우에는 난방구획마다 내화구조로 된 벽·바닥과 갑종방화문으로 된 출입문으로 구획하여야 한다. <신설 1999.5.11.>





//	건축물의 설비기준 등에 관한 규칙 13조 (개별난방설비) 2항

Check(RFB_13_2){

	IF CS THEN KS

}



CS{

	getBuildingUsage() = "Officetel"

}



KS{

	Wall myWall{

		isObjectProperty(Wall.isfireResistantStructure)

	}



	FloorSlab myFloorSlab{

		isObjectProperty(FloorSlab.isFireResistantStructure) = TRUE

	}



	Door myDoor{

		isObjectProperty(Door.isStrictFireproofDoor) = TRUE

	}


Zone myZone{
isObjectProperty(Zone.isHeatingSection) = TRUE
}
	isPartitioned(myZone, myWall) = TRUE

	OR isPartitioned(myZone, myFloorSlab) = TRUE

	OR isPartitioned(myZone, myDoor) = TRUE

} 




Python Code 변환 예정



7
건축물의 설비기준 등에 관한 규칙 제 14조 1 항 1호

1. 영 제46조제1항의 규정에 의하여 건축물에 방화구획이 설치된 경우에는 그 구획마다 1개소 이상의 배연창을 설치하되, 배연창의 상변과 천장 또는 반자로부터 수직거리가 0.9미터 이내일 것. 다만, 반자높이가 바닥으로부터 3미터 이상인 경우에는 배연창의 하변이 바닥으로부터 2.1미터 이상의 위치에 놓이도록 설치하여야 한다.





//건축물의 설비기준 등에 관한 규칙 14조 (배연설비) 1항 1호

Check(RFB_14_1_1){

	IF (CS) THEN KS1 AND KS2

}



Zone myZone{

		isObjectProperty(Zone.isFirePartition) = TRUE

	}





CS{

	isObjectProperty(Building.isFirePartition) = TRUE

}



KS1{

	

	hasSpace(myZone, SmokeVentilator) = TRUE

	

	getObjectVerticalDistance(SmokeVentilator, Ceiling) < 0.9 m

	OR getObjectVerticalDistance(SmokeVentilator, CeilingCovering) < 0.9 m

}



KS2{	

	IF{

		getSpaceHeight(myZone, b) >= 3 m

	}



	THEN{

		getObjectVerticalDistance(SmokeVentilator, FloorSlab) >= 2.1 m 

	}

} 




Python Code 변환 예정



8
건축물의 에너지절약설계기준 제 5조 10호 라 목

라. "대수분할운전”이라 함은 기기를 여러 대 설치하여 부하상태에 따라 최적 운전상태를 유지할 수 있도록 기기를 조합하여 운전하는 방식을 말한다.





//	비상경보설비의 화재안전기준(NFSC 201) 4조 (비상벨설비 또는 자동식사이렌설비) 5항 1호

Check(NFSC201_4_5_1){

	KS

}



KS{

	Switch mySwitch{
isObjectProperty(Switch.ControlSwitch) = TRUE
		isInstalled(Transmitter, Switch) = TRUE

	}



	getObjectVerticalLocation(FloorSlab, mySwitch) <= 1.5m

	getObjectVerticalLocation(FloorSlab, mySwitch) >= 0.8m

} 




Python Code 변환 예정



9
건축물의 에너지절약설계기준 제 5조 11호 가 목

거. "창문 연계 냉난방설비 자동 제어시스템”이라 함은 창문 개방시 센서가 이를 감지해 자동으로 해당 실의 냉난방 공급을 차단하는 시스템을 말한다.





//	비상콘센트설비의 화재안전기준(nfsc 504) 4조 (전원 및 콘센트 등) 5항 2호
Check(NFSC504_4_5_2){
	KS
}

KS{
	getObjectVerticalLocation(FloorSlab, EmergencyPowerOutlet) >= 0.8m
	getObjectVerticalLocation(FloorSlab, EmergencyPowerOutlet) <= 1.5m
} 




Python Code 변환 예정



10
건축물의 에너지절약설계기준 제 5조 9호 마 목

마. "최상층에 있는 거실의 반자 또는 지붕”이라 함은 최상층으로서 거실인 경우의 반자 또는 지붕을 말하며, 기타 층으로서 거실의 반자 또는 지붕 부위가 외기에 직접 또는 간접적으로 면한 부위를 포함한다. 다만, 복합용도의 건축물인 경우에는 다른 용도로 사용하는 공간과 접하는 부위를 최상층에 있는 거실의 반자 또는 지붕으로 볼 수 있다.





//  옥내소화전설비의 화재안전기준(nfsc 102) 7조 (함 및 방수구 등) 2항 2호

Check(NFSC503A_7_2_2){

  KS

}

KS{
Port myPort{
Port.typeForWater="IndoorFireHydrantDischarge"
}

	getObjectVerticalLocation(myPort, FloorSlab) > 0

 	getObjectVerticalDistance(FloorSlab, myPort) <= 1.5m

} 




Python Code 변환 예정



11
건축물의 에너지절약설계기준 제 6조 1호 가 2) 목

2) 지면 및 토양에 접한 바닥 부위로서 난방공간의 외벽 내표면까지의 모든 수평거리가 10미터를 초과하는 바닥부위





//스프링클러설비의 화재안전기준(NFSC 103) 6조 (폐쇄형스프링클러설비의 방호구역·유수검지장치) 4호 



Check(NFSC103_6_4){

    KS 

}



KS{

	Material myMaterial{

	getObjectProperty(Object.Material)="ProtectiveWireMesh"

	}

	isExternal(WaterflowIndicator)=FALSE

	OR isPartitioned(WaterflowIndicator, , myMaterial) = TRUE

	 getObjectVerticalDistance(FloorSlab, WaterflowIndicator, a)0.8m >=



 getObjectVerticalDistance(FloorSlab, WaterflowIndicator, a)0.8m <= 1.5m



	Door myDoor{

	getObjectProperty(Door.width) >= 0.5m

	getObjectProperty(Door.height) >= 1m

	}

	hasObject(WaterflowIndicator.Space,myDoor)=TRUE

} 




Python Code 변환 예정



12
건축물의 에너지절약설계기준 제 6조 2호

2. 에너지절약계획서 및 설계 검토서 제출대상 건축물은 별지 제1호 서식의 에너지 성능지표의 건축부문 1번 항목 배점을 0.6점 이상 획득하여야 한다.





// 스프링클러설비의 화재안전기준(NFSC 103) 9조 (음향장치 및 기동장치) 3항 5호 가목



Check(NFSC103_9_3_5_가){

	KS

}

KS{
isInstalled(Transmitter, Switch) = TRUE
	getObjectVerticalDistance(Switch, FloorSlab) >= 0.8m

	getObjectVerticalDistance(Switch, FloorSlab) <= 1.5m

} 




Python Code 변환 예정



13
건축물의 에너지절약설계기준 제 7조 3호

3. 단열계획





//스프링클러설비의 화재안전기준(nfsc 103) 11조 (송수구) 5호

Check(NFSC103_11_0_5){
	IF CS THEN KS
}
CS{
	isObject(Sprinkler.Head.openAndCloseType) = "EnclosedType"
}
KS{
	Port myPort{
	isObjectProperty(Port.typeForWater)="FireDepartmentConnection"
	}
	Space mySpace{
	isObjectProperty(Space.FloorSlab.area) = 3000m2
	}
	isInstalled(mySpace, myPort) = TRUE
	getObjectCount(mySpace.One.myPort) >= 1
	getObjectCount(myPort) <= 5
	
} 




Python Code 변환 예정



14
건축물의 에너지절약설계기준 제 9조 2호 마 목

마. 보일러의 배출수·폐열·응축수 및 공조기의 폐열, 생활배수 등의 폐열을 회수하기 위한 열회수설비를 설치한다. 폐열회수를 위한 열회수설비를 설치할 때에는 중간기에 대비한 바이패스(by-pass)설비를 설치한다.





// 	간이스프링클러설비의 화재안전기준(nfsc 103a) 4조 (수원) 4항 3호

Check(NFSC503A_4_4_3){
	IF CS THEN KS
}
CS{
	getObjectVerticalLocation(Tank.TopSurface, FloorSlab) = TRUE
}
KS{
	isInstalled(Ladder, Tank.SideSurface) = TRUE
	isObjectProperty(Ladder.isFixed) = TRUE
} 




Python Code 변환 예정



15
건축물의 에너지절약설계기준 제 10조 2호 가 목

가. 전동기에는 대한전기협회가 정한 내선규정의 콘덴서부설용량기준표에 의한 제5조제11호나목에 따른 역률개선용콘덴서를 전동기별로 설치하여야 한다. 다만, 소방설비용 전동기 및 인버터 설치 전동기에는 그러하지 아니할 수 있다.





//간이스프링클러설비의 화재안전기준(nfsc 103a) 6조 (간이스프링클러설비의 방호구역·유수검지장치) 1호

Check(NFSC503A_6_0_1){
	KS
}
KS{
	Zone myZon{
	isObjectProperty(Zone.isProtectionZone) = TRUE
	}
	isObjectProperty(myZone.FloorSlab.area) < 1000 m2
} 




Python Code 변환 예정



16
건축물의 에너지절약설계기준 제 10조 3호 가 목

가. 조명기기 중 안정기내장형램프, 형광램프, 형광램프용안정기를 채택할 때에는 제5조제11호라목에 따른 고효율 조명기기를 사용하여야 하며, 유도등 및 주차장 조명기기는 고효율에너지기자재 인증제품에 해당하는 LED 조명을 설치하여야 한다.





//간이스프링클러설비의 화재안전기준(nfsc 103a) 6조 (간이스프링클러설비의 방호구역·유수검지장치) 4호



Check(NFSC503A_6_0_4){

	KS

}

KS{


	(isExternal(WaterflowIndicator)=FALSE

	OR isPartitioned(WaterflowIndicator, ProtectiveWireMesh) = TRUE)

	0.8m <= getObjectVerticalDistance(FloorSlab, WaterflowIndicator, a) <= 1.5m



	Door myDoor{

	getObjectProperty(Door.width) >= 0.5m

	getObjectProperty(Door.height) >= 1m

	}

	hasObject(WaterflowIndicator.Space,myDoor)=TRUE

} 




Python Code 변환 예정



17
건축물의 에너지절약설계기준 제 17조 1 항 3호

「법 및 조례에서 정하는 건축물의 최고높이」× [1 + 완화기준]





// 간이스프링클러설비의 화재안전기준(nfsc 103a) 8조 (배관 및 밸브) 15항 1호

Check(NFSC503A_8_15_1){
	KS
}
KS{
	Pipe myPipe{
	isObjectProperty(Pipe.usage) = "WaterDrainPipe"
	}
	isParallel(FloorSlab, myPipe) = TRUE  
} 




Python Code 변환 예정



18
건축물의 에너지절약설계기준 제 24조 1 항

제24조(에너지절약계획서 및 설계 검토서의 이행) ① 허가권자는 건축주가 에너지절약계획서 및 설계 검토서의 작성내용을 이행하도록 허가조건에 포함하여 허가할 수 있다.





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 1항 



Check(NFSC203_7_1){

	IF (CS1 THEN KS1) OR (CS2 THEN KS2) OR (CS3 THEN KS3) OR (CS4 THEN KS4) OR (CS5 THEN KS5)

}

	Sensor mySensor1{

	getObjectProperty(Sensor.sensingMode) = "DifferentialTemperatureType"

	getObjectProperty(Sensor.sensingRange) = "LineType"

	}

	Sensor mySensor2{

	getObjectProperty(Sensor.sensingMode) = "CompensationType"

	getObjectProperty(Sensor.sensingRange) = "SpotType"

	}

	Sensor mySensor3{

	getObjectProperty(Sensor.sensingMode) = "ConstantTemperatureType"

	(getObjectProperty(Sensor.sensingRange) = "SpotType"

	OR getObjectProperty(Sensor.lineTypeEnum) = "LineType")

	}

	Sensor mySensor4{

	getObjectProperty(Sensor.sensingMode) = "ionizationType"

	}

	Sensor mySensor5{

	getObjectProperty(Sensor.sensingMode) = "PhotoelectricType"

	(getObjectProperty(Sensor.sensingRange) = "SpotType"

	OR getObjectProperty(Sensor.sensingRange) = "SeparateType"

	OR getObjectProperty(Sensor.sensingRange) = "AspiratingType")

	}

	Sensor mySensor6{

	getObjectProperty(Sensor.integratedType) = "HeatIntegratedType"

	}

	Sensor mySensor7{

	getObjectProperty(Sensor.integratedType) = "SmokeIntegratedType"

	}

	Sensor mySensor8{

	getObjectProperty(Sensor.integratedType) = "HeatAndSmokeIntegratedType"

	}

	}

	 

CS1{

	getObjectVerticalDistance(FloorSlab, Sensor) < 4m

}

KS1{

	(isObjectProperty(mySensor1.sensingRange) = "SpotType"

	isInstalled(mySensor1) = TRUE)

	OR isInstalled(mySensor2) = TRUE

	OR isInstalled(mySensor3) = TRUE

	OR isInstalled(mySensor4) = TRUE

	OR isInstalled(mySensor5) = TRUE

	OR isInstalled(mySensor6) = TRUE

	OR isInstalled(mySensor7) = TRUE

	OR isInstalled(mySensor8) = TRUE

	OR isInstalled(FlameSensor) = TRUE

}

CS2{

	getObjectVerticalDistance(FloorSlab, Sensor) >= 4m

	getObjectVerticalDistance(FloorSlab, Sensor) < 8m

}

KS2{

	(isObjectProperty(mySensor1.sensingRange) = "SpotType"

	isInstalled(mySensor1) = TRUE)

	OR isInstalled(mySensor2) = TRUE

	OR ((getObjectProperty(Sensor.type) = "SpecialType"

	OR getObjectProperty(Sensor.type) = "Type1")

	isInstalled(mySensor3) = TRUE)

	OR ((getObjectProperty(Sensor.type) = "Type1"

	OR getObjectProperty(Sensor.type) = "Type2")isInstalled(mySensor4) = TRUE)

	OR ((getObjectProperty(Sensor.type) = "Type1"

	OR getObjectProperty(Sensor.type) = "Type2")

	isInstalled(mySensor5) = TRUE)

	OR isInstalled(mySensor6) = TRUE

	OR isInstalled(mySensor7) = TRUE

	OR isInstalled(mySensor8) = TRUE

	OR isInstalled(FlameSensor) = TRUE

}

CS3{

	getObjectVerticalDistance(FloorSlab, Sensor) >= 8m

	getObjectVerticalDistance(FloorSlab, Sensor) < 15m

}

KS3{

	isInstalled(mySensor1) = TRUE

	OR ((getObjectProperty(Sensor.type) = "Type1"

	OR getObjectProperty(Sensor.type) = "Type2")isInstalled(mySensor4) = TRUE)

	OR ((getObjectProperty(Sensor.type) = "Type1"

	OR getObjectProperty(Sensor.type) = "Type2")

	isInstalled(mySensor5) = TRUE)

	OR isInstalled(mySensor7) = TRUE

	OR isInstalled(FlameSensor) = TRUE

}

CS4{

	getObjectVerticalDistance(FloorSlab, Sensor) >= 15m

	getObjectVerticalDistance(FloorSlab, Sensor) < 20m

}

KS4{

	((getObjectProperty(Sensor.type) = "Type1"

	isInstalled(mySensor4) = TRUE)

	OR (getObjectProperty(Sensor.type) = "Type1"

	isInstalled(mySensor5) = TRUE)

	OR isInstalled(mySensor7) = TRUE

	OR isInstalled(FlameSensor) = TRUE

}

CS5{

	getObjectVerticalDistance(FloorSlab, Sensor) >= 20m

}

KS5{

	Sensor mySensor9{

	getObjectProperty(Sensor.sensingMode) = "PhotoelectricType"

	(getObjectProperty(Sensor.sensingRange) = "SeparateType"

	OR getObjectProperty(Sensor.sensingRange) = "AspiratingType")

	getObjectProperty(Sensor.operationMode) = "Analog"isInstalled(mySensor5) = TRUE

	}

	isInstalled(mySensor9) = TRUE

	OR isInstalled(FlameSensor) = TRUE

} 




Python Code 변환 예정



19
건축물의 에너지절약설계기준 제 29조

제29조(재검토기한) 「훈령·예규 등의 발령 및 관리에 관한 규정」 (대통령훈령 제248호)에 따라 이 고시 발령 후의 법령이나 현실여건의 변화 등을 검토하여 이 고시의 폐지, 개정 등의 조치를 하여야 하는 기한은 2017년 5월 31일까지로 한다.





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 3항 5호

Check(NFSC203_7_3_5){

	IF CS1 AND CS2 THEN KS

}

	Sensor mySensor1{

	getObjectProperty(Sensor.sensingMode) = "DifferentialTemperatureType"

	getObjectProperty(Sensor.sensingRange) = "SpotType"

	}

	Sensor mySensor2{

	getObjectProperty(Sensor.sensingMode) = "CompensationType"

	getObjectProperty(Sensor.sensingRange) = "SpotType"

	}

	Sensor mySensor3{

	getObjectProperty(Sensor.sensingMode) = "ConstantTemperatureType"

	getObjectProperty(Sensor.sensingRange) = "SpotType"

	}

	 

CS1{

	getElementDistance(FloorSlab, Sensor) < 4m

	}

CS2{

	isFireResistantStructure(SpecificFireFightingBuilding.MainStructuralPart) = TRUE

	}

CS3{

	getElementDistance(FloorSlab, Sensor) < 8m

	getElementDistance(FloorSlab, Sensor) >= 4m

	}



KS{

	isObjectProperty(mySensor1.type) = "Type1"

	isInstalled(mySensor1, FloorSlab, 90) = TRUE

} 




Python Code 변환 예정



20
건축물의 에너지절약설계기준 제 별표1조

지역별 건축물 부위의 열관류율표





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 3항 6호

Check(NFSC203_7_3_6){

	KS

}

KS{

	Sensor mySensor{

	getObjectProperty(Sensor.sensingRange) = "SpotType"

	}

	getObjectGradient(FloorSlab, mySensor) < 45

} 




Python Code 변환 예정



21
건축물의 에너지절약설계기준 제 별표7조

냉·난방설비의 용량계산을 위한 설계 외기온·습도 기준





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 3항 7호 바목
Check(NFSC203_7_3_7_바){
	KS
}
KS{
	getObjectVerticalDistance(FloorSlab, DetectingElement) >= 0.8m
	getObjectVerticalDistance(FloorSlab, DetectingElement) <= 1.5m
}
} 




Python Code 변환 예정



22
건축물의 에너지절약설계기준 제 서식3조

에너지절약계획 이행 검토서





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 3항 5호
Check(NFSC203_7_3_5){

	Sensor mySensor1{
	getObjectProperty(Sensor.type) = "Type1"
	}
	Sensor mySensor2{
	isObjectProperty(Sensor.type) = "Type2"
	}

IF 
{isFireResistantStructure(SpecificFireFightingBuilding) = TRUE)
AND 
{isInstalled(Sensor, FloorSlab) = TRUE
	getObjectVerticalDistance(FloorSlab, Sensor) < 8m
}
THEN
{(FA = 65
isInstalled(mySensor1, FloorSlab.Space, C, FA) = TRUE)
OR 
(FA = 36 
isInstalled(mySensor2, FloorSlab.Space, C, FA) = TRUE)

IF getObjectArea(Sensor.FloorSlab) <= FA
THEN getObjectCount(Sensor) = 1

ELSE IF getObjectArea(Sensor.FloorSlab) <= 2*FA
THEN getObjectCount(Sensor) >= 2
}

ELSE IF
{isFireResistantStructure(SpecificFireFightingBuilding) = TRUE)
AND 
{isInstalled(Sensor, FloorSlab) = TRUE
AND
getObjectVerticalDistance(FloorSlab, Sensor) >= 8m
AND
getObjectVerticalDistance(FloorSlab, Sensor) < 15m

THEN
{(FA = 50
isInstalled(mySensor1, FloorSlab.Space, C, FA) = TRUE)
OR 
(FA = 36 
isInstalled(mySensor2, FloorSlab.Space, C, FA) = TRUE)

IF getObjectArea(Sensor.FloorSlab) <= 2*FA
THEN getObjectCount(Sensor) >= 2
}

ELSE IF
{isFireResistantStructure(SpecificFireFightingBuilding) != TRUE)
AND 
{isInstalled(Sensor, FloorSlab) = TRUE
	getObjectVerticalLocation(FloorSlab, Sensor) < 8m
}
THEN
{(FA = 40
isInstalled(mySensor1, FloorSlab.Space, C, FA) = TRUE)
OR 
(FA = 23 
isInstalled(mySensor2, FloorSlab.Space, C, FA) = TRUE)

IF getObjectArea(Sensor.FloorSlab) <= FA
THEN getObjectCount(Sensor) = 1

ELSE IF getObjectArea(Sensor.FloorSlab) <= 2*FA
THEN getObjectCount(Sensor) >= 2
}

ELSE IF
{isFireResistantStructure(SpecificFireFightingBuilding) != TRUE)
AND 
getObjectVerticalDistance(FloorSlab, Sensor) >= 8m
AND
getObjectVerticalDistance(FloorSlab, Sensor) < 15m
}

THEN
{(FA = 30
isInstalled(mySensor1, FloorSlab.Space, C, FA) = TRUE)
OR 
(FA = 23 
isInstalled(mySensor2, FloorSlab.Space, C, FA) = TRUE)

IF getObjectArea(Sensor.FloorSlab) <= 2*FA
THEN getObjectCount(Sensor) >= 2
} 




Python Code 변환 예정



23
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 19조 3 항

③ 법 제49조제3항에 따른 가구ㆍ세대 등 간 소음방지를 위한 바닥은 경량충격음(비교적 가볍고 딱딱한 충격에 의한 바닥충격음을 말한다)과 중량충격음(무겁고 부드러운 충격에 의한 바닥충격음을 말한다)을 차단할 수 있는 구조로 하여야 한다. <신설 2014.11.28>





check(REFB_19_1){

     KS

}



KS{

Wall myWall{
   isObjectProperty(Wall.isPartitionWall) = TRUE
}
Floor myFloor{
hasObject(Floor, myWall)
}
   isFireResistantStructure(myWall)=TRUE
(isConnectedTo(myWall, Roof.BottomSurface) = TRUE
 OR isCOnnectedTo(myWall, myFloor.UpperFloor.FloorSlab) = TRUE)

} 








def Check():
    for building in SELECT('building'):
        bldg_use = building.SELECT('building type').STRING()
        sub_use = building.SELECT('prop', '세부용도').STRING()
        space_codes = []
        
        if bldg_use == '단독주택' and sub_use == '다가구주택':
            space_codes = ['가구'] #가구
        elif (bldg_use == '공동주택' and sub_use != '기숙사') or (bldg_use == '노유자시설' and sub_use == '노인복지주택'):
            space_codes = ['33237'] #세대
        elif bldg_use == '공동주택' and sub_use == '기숙사':
            space_codes = ['33230'] #침실
        elif bldg_use == '의료시설':
            space_codes = ['34310'] #병실
        elif bldg_use == '교육연구시설' and sub_use == '학교':
            space_codes = ['34404', '34409']    #교실
        elif bldg_use == '숙박시설':
            space_codes = ['33201'] #객실
        elif (bldg_use == '제2종 근린생활시설' and sub_use == '다중생활시설') or (bldg_use == '노유자시설' and sub_use == '노인요양시설'):
            space_codes = ['호실'] #호실
        else:
            return

        for storey in building.SELECT('storey'):
            walls_list = []
            for space in storey.SELECT('space'):
                code = space.SELECT('class code').STRING()
                if code in space_codes:
                    walls_list.append(space.SELECT('wall'))
            
            n = len(walls_list)
            for i, walls in enumerate(walls_list):
                if i == n-1:
                    break
                for j, walls2 in enumerate(walls_list):
                    if i >= j:
                        continue
                    for wall in walls:
                        if wall.SELECT('isexterior').BOOL():
                            continue
                        id = wall.SELECT('element id').STRING()
                        for wall2 in walls2:
                            if wall2.SELECT('isexterior').BOOL():
                                continue
                            id2 = wall2.SELECT('element id').STRING()
                            if id == id2:
                                if wall.SELECT('prop', '경계벽').BOOL() == False:
                                    wall.ERROR('해당 벽은 경계벽이어야 합니다.')
                                else:
                                    if wall.SELECT('prop', '내화구조').BOOL() == False:
                                        wall.ERROR('경계벽은 내화구조이어야 합니다.')
                                    else:
                                        if wall.SELECT('top touched').BOOL():
                                            wall.SUCCESS('경계벽 조건에 부합합니다.')
                                        else:
                                            wall.ERROR('경계벽 상단이 슬라브와 닿지 않습니다.')
                                break 





24
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 3조 4호

4. 바닥의 경우에는 다음 각목의 1에 해당하는 것





//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 3조 (내화구조) 4호

Check (REFB_3_0_4){
	IF CS THEN KS
}
CS{
	isInstalled(FloorSlab) = TRUE
}
KS{
	getResult(REFB_3_0_4_가)=TRUE
    getResult(REFB_3_0_4_나)=TRUE
    getResult(REFB_3_0_4_다)=TRUE
} 




Python Code 변환 예정



25
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 3조 4호 나 목

나. 철재로 보강된 콘크리트블록조ㆍ벽돌조 또는 석조로서 철재에 덮은 콘크리트블록등의 두께가 5센티미터 이상인 것





//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 3조 (내화구조) 1호 다목

Check (REFB_3_0_4_나){
	IF CS THEN KS
}
CS{
getObjectProperty(FloorSlab.Structure.materialType) = "ConcreteBlock" OR "Brick" OR "Stone"
isObjectProperty(Structure.isReinforcedSteelStructure) = TRUE
}
KS{
getObjectThickness(FloorSlab.Structure) >= 5cm
}	
 




Python Code 변환 예정



26
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 30조 1호 가 목

가. 승강장의 출입구를 제외한 부분은 해당 건축물의 다른 부분과 내화구조의 바닥 및 벽으로 구획할 것





// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 30조 (피난용승강기의 설치기준) 1호 가목

check(REFB_30_0_1_가){

      KS

}

KS{

	FloorSlab myFloorSlab{

	isFireResistantStructure(FloorSlab) = TRUE

}

	Wall myWall{

	isFireResistantStructure(Wall) = TRUE

}

	Object  myElement{

		getObject(Platform.Object) - getObject(Opening)

	}

	isPartitioned(myElement, , myFloorSlab) = TRUE

	isPartitioned(myElement, , myWall) = TRUE

} 




Python Code 변환 예정



27
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 30조 3호 가 목

가. 출입구를 제외한 부분은 해당 건축물의 다른 부분과 내화구조의 바닥 및 벽으로 구획할 것





// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 30조 (피난용승강기의 설치기준) 3호 가목

check(REFB_30_0_3_가){

      KS

}

KS{

	FloorSlab myFloorSlab{

	isFireResistantStructure(FloorSlab) = TRUE

}

	Wall myWall{

	isFireResistantStructure(Wall) = TRUE

}

	Door myDoor{

	isObjectProperty(Door.isEntrance) = TRUE

	}

	Object myElement{

		getObject(Space.Object) - getObject(myDoor)

	}

	isPartitioned(myElement, , myFloorSlab) = TRUE

	isPartitioned(myElement, , myWall) = TRUE

} 




Python Code 변환 예정



28
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 11조 3 항

③영 제39조제1항의 규정에 의하여 건축물의 바깥쪽으로 나가는 출구를 설치하는 경우 관람석의 바닥면적의 합계가 300제곱미터 이상인 집회장 또는 공연장에 있어서는 주된 출구외에 보조출구 또는 비상구를 2개소 이상 설치하여야 한다.





// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 11조 (건축물의 바깥쪽으로의 출구의 설치기준) 3항

Check(REFB_11_3){
     

IF CS1 AND CS2 THEN KS


}





CS1 {

Building myBuilding{

getBuildingUsage() = “AssemblyHall”

OR getBuildingUsage() = “PerformanceHall”

}



Space mySpace{

myBuilding.Space.name = “Auditorium”

Space.FloorSlab.area >= 300 m2

}



isExist(mySpace) = TRUE

}



CS2 {

Door myDoor{

isObjectProperty(Door.isEntrance)=TRUE

}

hasObject(myBuilding,myDoor) = TRUE

}



KS {

Door myDoor{

getObjectProperty(Door.functionType) = "Auxiliary"

OR getObjectProperty(Door.functionType) = "Emergency" 

}



getObjectCount(myDoor) >=2

} 




Python Code 변환 예정



29
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 11조 5 항 1호

1. 제1종 근린생활시설 중 지역자치센터·파출소·지구대·소방서·우체국·방송국·보건소·공공도서관·지역건강보험조합 기타 이와 유사한 것으로서 동일한 건축물안에서 당해 용도에 쓰이는 바닥면적의 합계가 1천제곱미터 미만인 것





//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 11조 (건축물의 바깥쪽으로의 출구의 설치기준) 5항 1호

Check(REFB_11_5_1){
      

KS




}

KS {

Building myBuilding{

getBuildingUsage() = “ClassINeighborhoodLivingFacility.CommunityCenter”

OR getBuildingUsage() = “ClassINeighborhoodLivingFacility.PoliceBox”

OR getBuildingUsage() = “ClassINeighborhoodLivingFacility.PoliceSubstation”

OR getBuildingUsage() = “ClassINeighborhoodLivingFacility.FireStation”

OR getBuildingUsage() = “ClassINeighborhoodLivingFacility.PostOffice”

OR getBuildingUsage() = “ClassINeighborhoodLivingFacility.BroadcastingStation”

OR getBuildingUsage() = “ClassINeighborhoodLivingFacility.HealthCenter”

OR getBuildingUsage() = “ClassINeighborhoodLivingFacility.PublicLibrary”

OR getBuildingUsage() = “ClassINeighborhoodLivingFacility.RegionalHealthInsuranceAssociation”



}



Space mySpace{

Space.usage=“CommunityCenter”

Space.usage=“PoliceBox”

Space.usage=“PoliceSubstation”

Space.usage=“FireStation”

Space.usage=“PostOffice”

Space.usage=“BroadcastingStation”

Space.usage=“HealthCenter”

Space.usage=“PublicLibrary”

Space.usage=“RegionalHealthInsuranceAssociation”

Space.FloorSlab.area < 1000 m2

}

isExist(myBuilding) = TRUE

isExist(mySpace) = TRUE

} 




Python Code 변환 예정



30
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 13조 1 항 1호

1. 헬리포트의 길이와 너비는 각각 22미터이상으로 할 것. 다만, 건축물의 옥상바닥의 길이와 너비가 각각 22미터이하인 경우에는 헬리포트의 길이와 너비를 각각 15미터까지 감축할 수 있다.





//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙

Check(REFB){
    IF CS THEN KS1 ELSE KS2
}

CS{
   getObjectLength(Building.RoofTop.FloorSlab)<=22 m
   getObjectWidth(Building.RoofTop.FloorSlab)<=22 m
}

KS1{
   getObjectLength(Heliport)>=15 m
   getObjectWidth(Heliport)>=15 m
}

KS2{
  getObjectLength(Heliport)>=22 m
   getObjectWidth(Heliport)>=22 m
} 




Python Code 변환 예정



31
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 14조 3 항 4호

4. 사다리는 바로 아래층의 바닥면으로부터 50센터미터 이하까지 내려오는 길이로 할 것





// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 14조 (방화구획의 설치기준) 3항 4호



Check(REFB_14_3_4){

    KS

}



KS{

   getObjectVerticalDistance(Ladder, Floor.LowerFloor.FloorSlab.Surface, a)<= 50 cm 

} 




Python Code 변환 예정



32
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 19조 1 항

①영 제53조의 규정에 의하여 건축물에 설치하는 경계벽 및 간막이벽은 내화구조로 하고, 지붕밑 또는 바로 윗층의 바닥판까지 닿게 하여야 한다.





check(REFB_19_1){

     KS

}



KS{

Wall myWall{
   isObjectProperty(Wall.isPartitionWall) = TRUE
}
Floor myFloor{
hasObject(Floor, myWall)
}
   isFireResistantStructure(myWall)=TRUE
(isConnectedTo(myWall, Roof.BottomSurface) = TRUE
 OR isCOnnectedTo(myWall, myFloor.UpperFloor.FloorSlab) = TRUE)

} 








def Check():
    for building in SELECT('building'):
        bldg_use = building.SELECT('building type').STRING()
        sub_use = building.SELECT('prop', '세부용도').STRING()
        space_codes = []
        
        if bldg_use == '단독주택' and sub_use == '다가구주택':
            space_codes = ['가구'] #가구
        elif (bldg_use == '공동주택' and sub_use != '기숙사') or (bldg_use == '노유자시설' and sub_use == '노인복지주택'):
            space_codes = ['33237'] #세대
        elif bldg_use == '공동주택' and sub_use == '기숙사':
            space_codes = ['33230'] #침실
        elif bldg_use == '의료시설':
            space_codes = ['34310'] #병실
        elif bldg_use == '교육연구시설' and sub_use == '학교':
            space_codes = ['34404', '34409']    #교실
        elif bldg_use == '숙박시설':
            space_codes = ['33201'] #객실
        elif (bldg_use == '제2종 근린생활시설' and sub_use == '다중생활시설') or (bldg_use == '노유자시설' and sub_use == '노인요양시설'):
            space_codes = ['호실'] #호실
        else:
            return

        for storey in building.SELECT('storey'):
            walls_list = []
            for space in storey.SELECT('space'):
                code = space.SELECT('class code').STRING()
                if code in space_codes:
                    walls_list.append(space.SELECT('wall'))
            
            n = len(walls_list)
            for i, walls in enumerate(walls_list):
                if i == n-1:
                    break
                for j, walls2 in enumerate(walls_list):
                    if i >= j:
                        continue
                    for wall in walls:
                        if wall.SELECT('isexterior').BOOL():
                            continue
                        id = wall.SELECT('element id').STRING()
                        for wall2 in walls2:
                            if wall2.SELECT('isexterior').BOOL():
                                continue
                            id2 = wall2.SELECT('element id').STRING()
                            if id == id2:
                                if wall.SELECT('prop', '경계벽').BOOL() == False:
                                    wall.ERROR('해당 벽은 경계벽이어야 합니다.')
                                else:
                                    if wall.SELECT('prop', '내화구조').BOOL() == False:
                                        wall.ERROR('경계벽은 내화구조이어야 합니다.')
                                    else:
                                        if wall.SELECT('top touched').BOOL():
                                            wall.SUCCESS('경계벽 조건에 부합합니다.')
                                        else:
                                            wall.ERROR('경계벽 상단이 슬라브와 닿지 않습니다.')
                                break 





33
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 9조 2 항 3호 가 목

가. 건축물의 내부와 계단실은 노대를 통하여 연결하거나 외부를 향하여 열 수 있는 면적 1제곱미터 이상인 창문(바닥으로부터 1미터 이상의 높이에 설치한 것에 한한다) 또는 「건축물의 설비기준 등에 관한 규칙」 제14조의 규정에 적합한 구조의 배연설비가 있는 면적 3제곱미터 이상인 부속실을 통하여 연결할 것





//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 9조 (피난계단 및 특별피난계단의 구조) 2항 3호 가목

check (REFB_9_2_3_1){

CS THEN KS 

}

CS {

isExist(Stair.Space) = TRUE

}

KS {

	Window myWindow {

		getObjectProperty(Window.area)>= 1 m2

		isObjectProperty(Window.isExternalDirection) = TRUE

		 getElementDistance(Window, FloorSlab, a)>=1m



}

	SmokeExhaustionSystem mySmokeExhaustionSystem {

		getElement(SmokeExhaustionSystem)

		getResult(RFB_14)=TRUE

}



	Space mySpace1{

		getSpace(“Balcony”)

}

	Space mySpace2{

		isExternal(Space)=FALSE

}

	Space mySpace3{

		getSpace(“AncillaryRoom”)

		getFloorArea(Space.Floor, ) >= 3㎡

		hasElement(Space,mySmokeExhaustionSystem) = TRUE

		hasElement(Space,myWindow) = TRUE

}

isGoThrough(mySpace2,Stair.Space, ,mySpace1)

OR isGoThrough(mySpace2,Stair.Space, ,mySpace3) 




Python Code 변환 예정



34
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 3조 4호 가 목

가. 철근콘크리트조 또는 철골철근콘크리트조로서 두께가 10센티미터 이상인 것





//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 3조 (내화구조) 4호 가목

Check (REFB_3_0_4_가){
	KS
}
KS{
	getObjectProperty(Wall.Structure.materialType) = "ReinforcedConcrete" OR "SteelFramedReinforcedConcrete"
	getObjectThickness(FloorSlab.Structure) >= 10cm
} 




Python Code 변환 예정



35
건축법 시행령 제 36조 1호

1. 제2종 근린생활시설 중 공연장(해당 용도로 쓰는 바닥면적의 합계가 300제곱미터 이상인 경우만 해당한다), 문화 및 집회시설 중 공연장이나 위락시설 중 주점영업의 용도로 쓰는 층으로서 그 층 거실의 바닥면적의 합계가 300제곱미터 이상인 것





//건축법 시행령 36조 (옥외 피난계단의 설치) 1호

Check(EDBA_36_0_1){
        KS
}

KS{
      Floor myFloor{
          getFloorUsage()="CulturalAndAssemblyFacility.PerformanceHall"
          OR getFloorUsage()="AmusementFacility.BarBusiness"
      }

      FloorSlab myFloorSlab{
           getObjectUsage(FloorSlab)="NeighborhoodLivingFacility.PerformanceHall"
      }


      getFloorUsage()="NeighborhoodLivingFacility.PerformanceHall"
      getObjectArea(myFloorSlab)>=300 m2
      OR getTotalFloorArea(myFloor.Room)>300 m2

     
} 




Python Code 변환 예정



36
건축법 시행령 제 52조 1호

1. 건축물의 최하층에 있는 거실(바닥이 목조인 경우만 해당한다)





//건축법 시행령 52조 (거실 등의 방습) 1호

Check(EDBA_52_0_1){

CS}



CS{

hasObject(BottomFloor, Room) = TRUE
 getObjectProperty(FloorSlab.Structure.materialType) = "Timber"

} 




Python Code 변환 예정



37
건축법 시행령 제 61조 2 항 1호 가 목

가. 제1종 근린생활시설, 제2종 근린생활시설, 문화 및 집회시설, 종교시설, 판매시설, 의료시설, 교육연구시설, 노유자시설, 운동시설 및 위락시설의 용도로 쓰는 건축물로서 그 용도로 쓰는 바닥면적의 합계가 2천제곱미터 이상인 건축물





//건축법 시행령 61조 (건축물의 마감재료) 2항 1호 가목

Check(EDBA_61_2_1_가){
            KS 
}



KS{
   Building myBuilding{
    getResult(SASP_2_1_1)=True
   }

  FloorSlab myFloorSlab{

     //   getFloorUsage()=myBuilding.usage
  }
  
   getObjectArea(myFloorSlab)>2000 m2

   
} 




Python Code 변환 예정



38
건축법 시행령 제 41조 1 항 1호 나 목

나. 바닥면적의 합계가 500제곱미터 이상인 문화 및 집회시설, 종교시설, 의료시설, 위락시설 또는 장례시설: 유효 너비 3미터 이상





Check(EDBA_41_1_2){

   IF (CS) THEN  KS END IF

}



CS{

FloorSlab.area> 500 m2 

   Building.usage="CulturalAndAssemblyFacility"

   OR Building.usage="ReligiousFacility" 

   OR  Building.usage="MedicalFacility" 

   OR Building.usage="AmusementFacility" 

   OR Building.usage="FuneralParlor"  

}



KS{

  Passage.effectiveWidth> 3m ;

} 








target_bldg_uses_01 = ['단독주택']
target_bldg_uses_02 = ['문화 및 집회시설', '장례시설', '의료시설', '위락시설']

target_bldg_uses_01_label = '건축물 용도1'
target_bldg_uses_02_label = '건축물 용도2'

def Check():
    for building in SELECT('building'):
        bldg_use = building.SELECT('building type').STRING()
        min_corridor_w = 1.5
        min_area = 0.0

        if bldg_use in target_bldg_uses_01:
            min_corridor_w = 0.9
        elif bldg_use in target_bldg_uses_02:
            min_corridor_w = 3.0
            min_area = 500

        if min_area > 0:
            area = 0
            for space in building.SELECT('space'):
                area += space.SELECT('area').UNIT('m2').NUMBER()
            if area < min_area:
                building.SUCCESS('바닥면적의 합: ' + str(area) + ' < ' + str(min_area))
                continue

        base_storey = None
        stories = building.SELECT('storey')

        for storey in stories:
            if storey.SELECT('prop', '기준 지상층').BOOL() == True:
                base_storey = storey
                break

        if base_storey is None:
            building.ERROR('기준 지상층이 존재하지 않습니다.')
            break

        stairs = base_storey.SELECT('direct stair')

        if stairs.COUNT() == 0:
            base_storey.ERROR(base_storey.SELECT('name').STRING() + '에 직통계단이 존재하지 않습니다.')
            continue

        exDoors = []
        for door in base_storey.SELECT('door'):
            if door.SELECT('is external').BOOL() == True:
                exDoors.append(door)

        for stair in stairs:
            for route in stair.SELECT('escape route', exDoors):
                for space in route.SELECT('passing space'):
                    width = space.SELECT('min clear width').UNIT('m')
                    w = width.NUMBER()
                    if w < min_corridor_w:
                        width.ERROR('통로 너비: ' + str(w) + ' < ' + str(min_corridor_w))
                    else:
                        width.SUCCESS('통로 너비: ' + str(w) + ' >= ' + str(min_corridor_w)) 





39
건축법 시행령 제 39조 1 항 1호

1. 문화 및 집회시설(전시장 및 동·식물원은 제외한다)





// 건축법 시행령 39조 (건축물 바깥쪽으로의 출구 설치) 1항 1호

Check(EDBA_39_1_1){     
KS}

KS {

Building myBuilding{
getBuildingUsage() = “PerformanceHall”
OR getBuildingUsage() = “ReligiousAssemblyFacility ”
OR getBuildingUsage() = “FacilityForProvidingInternetComputerGameService”
}

Space mySpace{
Space.usage = “PerformanceHall”
OR Space.usage = “ReligiousAssemblyFacility ”
OR Space.usage = “FacilityForProvidingInternetComputerGameService”
}

IF isExist(myBuilding) THEN mySpace.FloorSlab.area >= 300 m2

}
 








target_bldg_type_1 = ['제2종 근린생활시설', '문화 및 집회시설', '종교시설', '판매시설', '업무시설', '창고시설', '교육연구시설', '장례시설', '승강기를 설치하여야하는 건축물']
target_bldg_sub_type_2 = ['판매시설']
max_route_length_stair_to_door = 30
max_route_length_space_to_door = 60
min_em_door_count = 2
min_em_door_h = 1.5
min_em_door_w = 0.75

target_bldg_types_1_label = '외부 출입구 방향 적용 대상 건출물 용도'
target_bldg_types_2_label = '외부 출입구 유효너비 대상 건출물 용도'

max_route_length_stair_to_door_label = '직통계단과 외부 출입구 간 최소거리'
max_route_length_space_to_door_label = '거실과 외부 출입구 간 최소거리'
min_em_door_count_label = '최소 비상구 개수'
min_em_door_h_label = '최소 비상구 높이'
min_em_door_w_label = '최소 비상구 유효너비'

def Check():
    for building in SELECT('building'):
        bldg_type = building.SELECT('building type').STRING()
        sub_type = building.SELECT('prop', '세부용도').STRING()
        if (bldg_type in target_bldg_type_1):
            if bldg_type == '제2종 근린생활시설' and sub_type in ['공연장', '종교집회장', '인터넷컴퓨터게임시설제공업소']:
                message =  '검토 대상 건물이 아닙니다.' + '(용도:' + bldg_type + ', 세부용도:' + sub_type + ' )'
                SUCCESS(message)
                break
            elif bldg_type == '문화 및 집회시설' and sub_type in ['전시장', '동물원', '식물원']:
                message =  '검토 대상 건물이 아닙니다.' + '(용도:' + bldg_type + ', 세부용도:' + sub_type + ' )'
                SUCCESS(message)
                break
            elif bldg_type == '업무시설' and sub_type == '청사':
                message =  '검토 대상 건물이 아닙니다.' + '(용도:' + bldg_type + ', 세부용도:' + sub_type + ' )'
                SUCCESS(message)
                break
            elif bldg_type == '교육연구시설' and sub_type == '학교':
                message =  '검토 대상 건물이 아닙니다.' + '(용도:' + bldg_type + ', 세부용도:' + sub_type + ' )'
                SUCCESS(message)
                break
            message =  '검토 대상 건물입니다.' + '(용도:' + bldg_type + ', 세부용도:' + sub_type + ' )'
            SUCCESS(message)

        else:
            message =  '검토 대상 건물이 아닙니다.' + '(용도:' + bldg_type + ', 세부용도:' + sub_type + ' )'
            SUCCESS(message)
            break



        evac_storey_exist = False
        stories = building.SELECT('storey')

        for storey in stories:
            if storey.SELECT('is evacuation storey').BOOL() == True:
                evac_storey_exist = True
                break

        if evac_storey_exist == False:
            ERROR('피난층이 존재하지 않습니다.')
            return

        for storey in stories:
            stairs = storey.SELECT('direct stair')

            if stairs.COUNT() == 0:
                storey.ERROR(storey.SELECT('name').STRING() + '에 직통계단이 존재하지 않습니다.')
                continue

            exDoors = []
            for door in storey.SELECT('door'):
                if door.SELECT('is external').BOOL() == True:
                    exDoors.append(door)

            for stair in stairs:
                route_length = -1
                for route in stair.SELECT('escape route', exDoors):
                    length = route.SELECT('length').UNIT('m').NUMBER()
                    if length > 0:
                        if route_length < 0:
                            route_length = length
                        else:
                            route_length = min([route_length, length])
                if route_length < 0:
                    stair.ERROR(stair.SELECT('name').STRING() + '부터 외부 출입구까지 갈 수 없다.')
                elif route_length > max_route_length_stair_to_door:
                    stair.ERROR(stair.SELECT('name').STRING() + '부터 외부 출입구까지의 거리가 멀다 : ' + str(route_length))
                else:
                    stair.SUCCESS(stair.SELECT('name').STRING() + ' : ' + str(route_length))

            spaces = storey.SELECT('space')

            for space in spaces:
                route_length = -1
                for route in space.SELECT('escape route', exDoors):
                    length = route.SELECT('length').UNIT('m').NUMBER()
                    if length > 0:
                        if route_length < 0:
                            route_length = length
                        else:
                            route_length = min([route_length, length])
                if route_length < 0:
                    space.ERROR(space.SELECT('name').STRING() + '부터 외부 출입구까지 갈 수 없다.')
                elif route_length > max_route_length_space_to_door:
                    space.ERROR(space.SELECT('name').STRING() + '부터 외부 출입구까지의 거리가 멀다 : ' + str(route_length))
                else:
                    space.SUCCESS(space.SELECT('name').STRING() + ' : ' + str(route_length))

            if bldg_type in target_bldg_types_1:
                for door in exDoors:
                    if door.SELECT('is inward').BOOL():
                        door.ERROR('외부 출입구의 방향이 안여닫이입니다.')

                for space in spaces:
                    code = space.SELECT('class code').STRING()
                    if not code in theater_space_codes:
                        continue
                    area = space.SELECT('area').UNIT('m2').NUMBER()
                    if area < 300:
                        continue
                    emExits = []
                    for door in space.SELECT('space door'):
                        if door.SELECT('prop', '비상구').BOOL() or door.SELECT('prop', '보조출입구').BOOL():
                            emExits.append(door)
                    if len(emExits) < min_em_door_count:
                        space.ERROR('비상구(보조출입구) 개수:' + str(len(emExits)) + '(<' + str(min_em_door_count) + ')')
                        continue
                    em_exit_count = 0
                    for exit in emExits:
                        if exit.SELECT('clear opening').UNIT('m').NUMBER() >= min_em_door_w and exit.SELECT('height').UNIT('m').NUMBER() >= min_em_door_h:
                            em_exit_count += 1
                    if em_exit_count < min_em_door_count:
                        space.ERROR('기준(' + str(min_em_door_w) + 'X' + str(min_em_door_h) + ')을 충족하는 비상구(보조출입구) 개수:' + str(em_exit_count) + '(<' + str(min_em_door_count) + ')')
                    else:
                        space.SUCCESS('기준(' + str(min_em_door_w) + 'X' + str(min_em_door_h) + ')을 충족하는 비상구(보조출입구) 개수:' + str(em_exit_count) + '(>=' + str(min_em_door_count) + ')')

            if bldg_type in target_bldg_types_2:
                if storey.SELECT('is evacuation storey').BOOL() == False:
                    continue
                max_area = 0;
                for space in spaces:
                    area = space.SELECT('area').UNIT('m2').NUMBER()
                    if area > max_area:
                        max_area = area
                min_door_w = max_area / 100 * 0.6;

                for door in exDoors:
                    width = door.SELECT('clear opening').UNIT('m')
                    w = width.NUMBER()
                    if (w < min_door_w):
                        width.ERROR('출구 유효너비:' + str(w) + '(<' + str(min_door_w) + ')')
                    else:
                        width.SUCCESS('출구 유효너비:' + str(w) + '(>=' + str(min_door_w) + ')')
 





40
건축법 시행령 제 44조

제44조 (피난 규정의 적용례) 건축물이 창문, 출입구, 그 밖의 개구부(開口部)(이하 "창문등"이라 한다)가 없는 내화구조의 바닥 또는 벽으로 구획되어 있는 경우에는 그 구획된 각 부분을 각각 별개의 건축물로 보아 제34조부터 제41조까지를 적용한다.





//건축법 시행령 44조 (피난 규정의 적용례)



Check(EDBA_44){

   IF CS THEN KS

}



CS{

   Door myDoor{

      isObjectProperty(Door.isEntrance)=True

   }



   Object  myElement {

        getObject(Window)

        getObject(Opening)

        getObject(myDoor)

   }

   

   FloorSlab myFloorSlab{



        getObjectProperty(FloorSlab.isFireResistantStructure)=True

   }



     Wall myWall{

        getObjectProperty(FloorSlab.isFireResistantStructure)=True

        hasObject(Wall, myElement) =False

   }



   isFirePartition(Building, myFloorSlab)=True

   OR  isFirePartition(Building, myWall)=True

   



}



KS{

   getResult(EDBA_34)=True

   getResult(EDBA_35)=True

   getResult(EDBA_36)=True

   getResult(EDBA_37)=True

   getResult(EDBA_38)=True

   getResult(EDBA_39)=True

   getResult(EDBA_40)=True

   getResult(EDBA_41)=True

} 




Python Code 변환 예정



41
건축법 시행령 제 46조 1 항

① 법 제49조제2항에 따라 주요구조부가 내화구조 또는 불연재료로 된 건축물로서 연면적이 1천 제곱미터를 넘는 것은 국토해양부령으로 정하는 기준에 따라 내화구조로 된 바닥·벽 및 제64조에 따른 갑종 방화문(국토해양부장관이 정하는 기준에 적합한 자동방화셔텨를 포함한다. 이하 이 조에서 같다)으로 구획(이하 "방화구획"이라 한다)하여야 한다. 다만, 「원자력법」 제2조에 따른 원자로 및 관계시설은 「원자력법」에서 정하는 바에 따른다.





//건축법 시행령 46조 (방화구획의 설치) 1항

Check(EDBA_46_1){

   IF (!CS1 AND CS2) THEN KS

}





CS1{

  getBuildingUsage()="NuclearReactorAndRelatedFacility"

}



CS2{

  (isObjectProperty(MainStructuralPart.isFireResistantStructure)=TRUE

  OR isObjectProperty(MainStructuralPart.Material.nonCombustibility)=TRUE))

  AND Building.grossFloorArea>1000 m2

}



KS{



  Floor myFloor{

      isObjectProperty(FloorSlab.isFireResistantStructure)=TRUE

  }

  Wall myWall{

      isObjectProperty(Wall.isFireResistantStructure)=TRUE

  }

  Door myDoor{

      isObjectProperty(Door.isStrictFireproofDoor)=TRUE

  }



  isFirePartition(Building, myFloor)=TRUE

  AND  isFirePartition(Building, myWall)=TRUE

  AND  isFirePatrition(Building, myDoor)=TRUE



  AND getResult(REFB_14_1)=TRUE

  AND getResult(REFB_14_2)=TRUE

  AND getResult(REFB_14_3)=TRUE



} 




Python Code 변환 예정



42
소화기구 및 자동소화장치의 화재안전기준(NFSC 101) 제 4조 8호 가 목

가. 분사헤드의 설치 높이는 방호구역의 바닥으로부터 최소 0.2m 이상 최대 3.7m 이하로 하여야 한다. 다만, 별도의 높이로 형식승인 받은 경우에는 그 범위 내에서 설치할 수 있다.





//소화기구 및 자동 소화장치의 화재안전기준(nfsc 101) 4조 (설치기준) 1항 8호 가목
Check(NFSC101_4_1_8_가){
	KS
}

Zone myZone{
	isObjectProperty(Zone.isProtectionZone)=TRUE
}

02.m <= getObjectVerticalDistance(myZone.FloorSlab, AutomaticFireExtinguishingEquipment.Head, a) <= 3.7m
	 




Python Code 변환 예정



43
소화기구 및 자동소화장치의 화재안전기준(NFSC 101) 제 4조 2 항

② 이산화탄소 또는 할로겐화합물(할론 1301과 청정소화약제를 제외한다)을 방사하는 소화기구(자동확산소화장치를 제외한다)는 지하층이나 무창층 또는 밀폐된 거실로서 그 바닥면적이 20㎡ 미만의 장소에는 설치할 수 없다. 다만, 배기를 위한 유효한 개구부가 있는 장소인 경우에는 그러하지 아니하다.<개정 2008.12.15, 2012.6.11>





//소화기구 및 자동 소화장치의 화재안전기준(nfsc 101) 4조 (설치기준) 2항

Check(NFSC101_4_2){

	KS

}



KS{

	FireExtinguisher myFireExtinguisher{

	getObjectProperty(FireExtinguishingEquipment.extinguishingAgentType) = "GasType"

	}

	Space mySpace{

		(getFloorNumber(Space) = -1

	OR hasSpace(Space, Window) = FALSE

	OR isObjectProperty(Room.isEnclosed)=TRUE)

	getObjectProperty(Space.FloorSlab) < 20 m2

	}



	getSpace(mySpace, myFireExtinguisher) = FALSE

} 




Python Code 변환 예정



44
연결송수관설비의 화재안전기준(NFSC 502) 제 6조 4호

4. 방수구의 호스접결구는 바닥으로부터 높이 0.5m 이상 1m 이하의 위치에 설치할 것





//연결송수관설비의 화재안전기준(NFSC 502) 6조 (방수구) 4호



Check(NFSC502_6_0_4){



    KS

}



KS{

    getObjectVerticalDistance(FloorSlab, FireDepartmentConnectionSystem.Port.HosePort) > 0.5m
OR   getObjectVerticalDistance(FloorSlab, FireDepartmentConnectionSystem.Port.HosePort)  <= 1m 




Python Code 변환 예정



45
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 5조 2 항

②피난구유도등은 피난구의 바닥으로부터 높이 1.5m 이상의 곳에 설치하여야 한다.





//유도등 및 유도표지의 화재안전기준(nfsc 303) 5조 (피난구유도등) 2항

Check(NFSC303_5_2){
     KS
}

KS{
Opening myOpening{
   isObjectProperty(Opening.isEscape)=True
}
 LeadingLight myLeadingLight{
        isObjectProperty(LeadingLight.isForExit)=True
    }

    getObjectVerticleDistance(myLeadingLight, myOpening.FloorSlab)>=1.5 m
} 




Python Code 변환 예정



46
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 6조 1 항 1호 다 목

다. 바닥으로부터 높이 1m 이하의 위치에 설치할 것. 다만, 지하층 또는 무창층의 용도가 도매시장·소매시장·여객자동차터미널·지하역사 또는 지하상가인 경우에는 복도·통로 중앙부분의 바닥에 설치하여야 한다.





//유도등 및 유도표지의 화재안전기준(nfsc 303) 6조 (통로유도등 설치기준) 1항 1호 다목

Check(NFSC303_6_1_1_다){
           KS
}

KS{ 
   Floor myFloor{
       getFloorNumber()<0
       OR hasObject(Floor, Window)=False
   }
   
   IF getFloorUsage(myFloor)="WholesaleMarket"
      OR getFloorUsage(myFloor)="RetailMarket"
      OR getFloorUsage(myFloor)="PassengerVehicleTransportTerminal"
      OR getFloorUsage(myFloor)="UndergroundStation"
      OR getFloorUsage(myFloor)="UndergroundShoppingCenter" 
      THEN   //  복도·통로 중앙부분의 바닥에 설치하여야 한다.
   ELSE THEN
       getObjectVerticalDistance(FloorSlab, LeadingLightForCorridors )<= 1 m
} 




Python Code 변환 예정



47
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 6조 1 항 2호 다 목

다. 바닥으로부터 높이 1.5m 이상의 위치에 설치할 것. 다만, 거실통로에 기둥이 설치된 경우에는 기둥부분의 바닥으로부터 높이 1.5m 이하의 위치에 설치할 수 있다.<개정 2008.12.15>





//유도등 및 유도표지의 화재안전기준(nfsc 303)  6조 (통로유도등 설치기준) 1항 2호 다목

Check(NFSC303_6_1_2_다){
      KS
}

KS{

   IF hasObject(Room.Passage, Column)=False
      
      THEN   getObjectVerticalDistance(FloorSlab,LeadingLightForLivingRoom )>=1.5 
} 




Python Code 변환 예정



48
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 6조 1 항 3호 나 목

나. 바닥으로부터 높이 1m 이하의 위치에 설치할 것





//유도등 및 유도표지의 화재안전기준(nfsc 303) 6조 (통로유도등 설치기준) 1항 3호 나목

Check(NFSC303_6_1_3_나){
         KS
}

KS{
        getObjectVerticalDistance(FloorSlab, LeadingLightForStairs)=<=1 m
} 




Python Code 변환 예정



49
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 7조 1 항

제7조(객석유도등 설치기준) ①객석유도등은 객석의 통로, 바닥 또는 벽에 설치하여야 한다.





//유도등 및 유도표지의 화재안전기준(nfsc 303) 7조 (객석유도등 설치기준) 1항

Check(NFSC303_7_1){
           KS
}

LeadingLight myLight{
  isObjectProperty(LeadingLight.isForSeat)=True
}

KS{
   isInstalled(myLight, Passage)=True
   (
    isInstalled(myLight, FloorSlab)=True
    OR isInstalled(myLight, Wall)=True
    )
} 




Python Code 변환 예정



50
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 8조 1 항 2호

2. 피난구유도표지는 출입구 상단에 설치하고, 통로유도표지는 바닥으로부터 높이 1m 이하의 위치에 설치할 것<개정 2008.12.15>





//유도등 및 유도표지의 화재안전기준(nfsc 303) 8조 (유도표지 설치기준) 1항 2호

Check(NFSC303_8_1_2){
       KS
}

KS{
    getObjectVerticleDistance(LeadingSign, FloorSlab)<=1 m
} 




Python Code 변환 예정



51
자동화재탐지설비 및 시각경보장치의 화재안전기준(NFSC 203) 제 7조 3 항 10호 가 목

가. 감지기의 부착높이에 따라 다음 표에 따른 바닥면적마다 1개 이상으로 할 것





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 3항 10호 가목

Check(NFSC203_7_3_10_가){

	IF (CS1 THEN KS1) OR (CS2 THEN KS2)

}



	Sensor mySensor1{

	getObjectProperty(Sensor.type) = "Type1"

	OR getObjectProperty(Sensor.type) = "Type2"

	}

	Sensor mySensor2{

	isObjectProperty(Sensor.type) = "Type3"

	}



CS1{

	getObjectVerticalDistance(FloorSlab, Sensor) < 4m

} 

KS1{

	isInstalled(mySensor1, FloorSlab.Space, C, 150) = TRUE)

	OR isInstalled(mySensor2, FloorSlab.Space, C, 50) = TRUE)

}

CS2{

	getObjectVerticalDistance(FloorSlab, Sensor) >= 4m

	getObjectVerticalDistance(FloorSlab, Sensor) < 20m

}

KS2{

	isInstalled(mySensor1, FloorSlab.Space, C, 75) = TRUE)

} 




Python Code 변환 예정



52
자동화재탐지설비 및 시각경보장치의 화재안전기준(NFSC 203) 제 7조 3 항 13호 라 목

라. 감지기를 천장에 설치하는 경우에는 감지기는 바닥을 향하여 설치할 것






자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 3항 13호 라목

Check(NFSC203_7_3_13_라){
	IF CS THEN KS
}
CS{
	isInstalled(Sensor, Ceiling) = TRUE
}
KS{
	객체설치방향(Sensor, FloorSlab) = TRUE
} 




Python Code 변환 예정



53
자동화재탐지설비 및 시각경보장치의 화재안전기준(NFSC 203) 제 7조 5 항 1호

1. 천장 또는 반자의 높이가 20m 이상인 장소. 다만, 제1항 단서 각호의 감지기로서 부착높이에 따라 적응성이 있는 장소는 제외한다.





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 5항 1호

Check(NFSC203_7_5_1){
	IF CS THEN KS
}
CS{
	getObjectVerticalDistance(FloorSlab, Ceiling) >= 20m
	OR getObjectVerticalDistance(FloorSlab, CeilingCovering) >= 20m
}
KS{
	isInstalled(Sensor) = FALSE
}
 




Python Code 변환 예정



    1