제34조(테두리보) 건축물의 각층의 조적식구조인 내력벽 위에는 그 춤이 벽두께의 1.5배 이상인 철골구조 또는 철근콘크리트구조의 테두리보를 설치하여야 한다. 다만, 1층인 건축물로서 벽두께가 벽의 높이의 16분의 1이상이거나 벽길이가 5미터 이하인 경우에는 목조의 테두리보를 설치할 수 있다.
//건축물의 구조기준 등에 관한 규칙 34조 (테두리보)
Check(RSSB_34){
getResult(RSSB_28_1) = TRUE AND getResult(RSSB_3_3) = TRUE AND IF CS THEN KS
}
CS{
Wall myWall{
isObjectProperty(Wall.isLoadBearingWall)=True
}
isObjectProperty(myWall.Structure.isMansoryStructure)= True
}
KS{
WD=getObjectProperty(myWall.depth)
WH=getObjectProperty(myWall.height)
WallGirder myWallGirder{
getObjectProperty(WallGirder.height)>=1.5*WD
}
isInstalled(myWallGrider, myWall, Top)=True
IF getBuildingStoriesCount()=1
(WD>=WH/16
OR getObjectProperty(myWall.length)<=5 m
)
THEN getObjectProperty(myWallGrider.Structure.materialType)="Timber"
ELSE THEN getObjectProperty(myWallGrider.Structure.materialType)="SteelFrame"
OR getObjectProperty(myWallGrider.Structure.materialType)="ReinforcedConcrete"
END IF
}
②2층 이상인 건축물에 있어서는 모서리에 설치하는 기둥 또는 이에 준하는 기둥은 통재(通材)기둥으로 하여야 한다. 다만, 이은기둥의 경우 그 이은 부분을 통재기둥과 동등 이상의 내력을 가지도록 보강한 경우에는 그러하지 아니하다.
//건축물의 구조기준 등에 관한 규칙 24조 (압축재의 최소단면 및 모서리에 설치하는 기둥) 2항
Check(RSSB_24_2){
getResult(RSSB_3_3) = TRUE AND IF CS THEN KS
}
CS{
getBuildingStoriesCount() >= 2
}
KS{
Column myColumn{
isInstalled(Column, Building.Edge) = TRUE
3. 높이 31미터를 넘는 층수가 4개층이하로서 당해 각층의 바닥면적의 합계 200제곱미터(벽 및 반자가 실내에 접하는 부분의 마감을 불연재료로 한 경우에는 500제곱미터)이내마다 방화구획으로 구획한 건축물
//건축물의 설비기준 등에 관한 규칙 9조 (비상용승강기를 설치하지 아니할 수 있는 건축물) 3호
Check(RFB_9_0_3){
KS
}
KS{
getBuildingHeight()>31 m
getBuildingStoriesCount()<=4
IF isObjectProperty(Wall.InteriorFinish.Material.nonCombustibility)=TRUE
isObjectProperty(CeilingCovering.InteriorFinish.Material.nonCombustibility)=TRUE
THEN isFirePartition(Floor, a,500)=TRUE
ELSE THEN isFirePartition(Floor, a,200)=TRUE
END IF
}
① 영 제34조제3항 및 제4항에 따라 설치하는 피난안전구역(이하 "피난안전구역"이라 한다)은 해당 건축물의 1개층을 대피공간으로 하며, 대피에 장애가 되지 아니하는 범위에서 기계실, 보일러실, 전기실 등 건축설비를 설치하기 위한 공간과 같은 층에 설치할 수 있다. 이 경우 피난안전구역은 건축설비가 설치되는 공간과 내화구조로 구획하여야 한다. <개정 2012.1.6>
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 8조의2 (피난안전구역의 설치기준) 1항
check(REFB_8-2_1){
KS1 AND IF CS THEN KS2
}
Zone myZone{
isObjectProperty(Zone.isEgressSafetyZone) = TRUE
}
Space mySpace{
hasSpace(Space, FacilitiesOfABuilding)
}
Structure myStructure{
isObjectProperty(Space.isfireResistantStructure) = TRUE
}
KS1{
BSC = getBuildingStoriesCount()
getFloorNumber(myZone) <= BSC
}
CS{
getFloorNumber(mySpace) = getFloorNumber(myZone)
}
KS2{
isPartitioned(myZone, myStructure, mySpace) = TRUE
}
제20조의2 (내화구조의 적용이 제외되는 공장건축물) 영 제56조제1항제3호 단서에서 "국토해양부령으로 정하는 공장"이란 별표 2의 업종에 해당하는 공장으로서 주요구조부가 불연재료로 되어 있는 2층 이하의 공장을 말한다. <개정 2005.7.22, 2008.3.14, 2009.7.1>
② 법 제49조제2항에 따라 6층 이상인 건축물로서 문화 및 집회시설, 종교시설, 판매시설, 운수시설, 의료시설, 교육연구시설 중 연구소, 노유자시설 중 아동 관련 시설·노인복지시설, 수련시설 중 유스호스텔, 운동시설, 업무시설, 숙박시설, 위락시설, 관광휴게시설 및 장례식장의 거실에는 국토해양부령으로 정하는 기준에 따라 배연설비(排煙設備)를 하여야 한다. 다만, 피난층인 경우에는 그러하지 아니하다.
//건축법 시행령 51조 (거실의 채광 등) 2항
Check(EDBA_51_2){
IF (!CS1 AND CS2) THEN KS
}
CS1{
Floor myFloor{
isObjectProperty(Floor.isEscape) = TRUE
}
getFloorNumber(Room) = getFloorNumber(myFloor)
}
CS2{
getBuildingStoriesCount() >= 6
getResult(EDBA_51_2_1) = True
OR getResult(EDBA_51_2_2) = True
OR getResult(EDBA_51_2_3) = True
OR getResult(EDBA_51_2_4) = True
OR getResult(EDBA_51_2_5) = True
OR getResult(EDBA_51_2_6) = True
OR getResult(EDBA_51_2_7) = True
OR getResult(EDBA_51_2_8) = True
OR getResult(EDBA_51_2_9) = True
OR getResult(EDBA_51_2_10) = True
OR getResult(EDBA_51_2_11) = True
OR getResult(EDBA_51_2_12) = True
OR getResult(EDBA_51_2_13) = True
OR getResult(EDBA_51_2_14) = True
OR getResult(EDBA_51_2_15) = True
}
KS{
hasSpace(Room, SmokeExhaustionSystem) = True
getResult(RFB_14_1) = True
getResult(REFB_17_1) = True
getResult(REFB_17_2) = True
}
① 법 제50조제1항에 따라 다음 각 호의 어느 하나에 해당하는 건축물(제5호에 해당하는 건축물로서 2층 이하인 건축물은 지하층 부분만 해당한다)의 주요구조부는 내화구조로 하여야 한다. 다만, 연면적이 50제곱미터 이하인 단층의 부속건축물로서 외벽 및 처마 밑면을 방화구조로 한 것과 무대의 바닥은 그러하지 아니하다. <개정 2009.6.30>
//건축법 시행령 56조 (건축물의 내화구조) 1항
check(EDBA_56_1){
IF !CS THEN KS
}
Space mySpace{
Space.usage="StagePart"
}
Floor myFloor{
hasSpace(mySpace, Floor) = TRUE
}
CS {
getTotalFloorArea()<= 50m2
AND getBuildingStoriesCount()=1
AND getBuildingUsage()="AccessoryBuidling"
AND isFireProofStructure("OuterWall" | "eaves" | myFloor)=TRUE
}
KS {
getResult(EDBA_56_1_1 = TRUE
OR getResult(EDBA_56_1_2) = TRUE
OR getResult(EDBA_56_1_3) = TRUE
OR getResult(EDBA_56_1_4) = TRUE
OR getResult(EDBA_56_1_5) = TRUE
AND isFireProofStructure(MainStructuralPart) = TRUE
}
5. 3층 이상인 건축물 및 지하층이 있는 건축물. 다만, 단독주택(다중주택 및 다가구주택은 제외한다), 동물 및 식물 관련 시설, 발전시설(발전소의 부속용도로 쓰는 시설은 제외한다), 교도소·감화원 또는 묘지 관련 시설(화장장은 제외한다)의 용도로 쓰는 건축물과 철강 관련 업종의 공장 중 제어실로 사용하기 위하여 연면적 50제곱미터 이하로 증축하는 부분은 제외한다.
//건축법 시행령 56조 (건축물의 내화구조) 1항 5호
check(EDBA_56_1_5){
IF !CS THEN KS
}
Building myBuilding{
getBuildingUsage() = "PowerPlant"
isObjectProperty(Building.isAttachedBuilding) = TRUE
}
Building myBuilding{
getResult(REFB_*_3_30) = TRUE
getResult(REFB_*_3_31) = TRUE
}
CS{
getBuildingUsage() = "facilities for animals and plants"
| "facilities for power generation"
| "correctional facilities and military installations.prison"
| "correctional facilities and military installations.reformatories
| "myFactory"
OR (getBuildingUsage() = "detached houses"
AND getBuildingUsage() != "detached houses.multi-user houses"
| "detached houses.multi-family houses" )
OR (getBuildingUsage() = "facilities for power generation"
AND (getBuildingUsage() = "myBuilding"
OR (getBuildingUsage() = "cemeteries and related facilities"
AND getBuildingUsage() != "Crematorium")
}
KS{
Floor myFloor{
Floor.number < 0
}
getBuildingStoriesCount() >= 3
AND isExist(myFloor) = TRUE
}
① 건축물의 피난층(직접 지상으로 통하는 출입구가 있는 층을 말한다. 이하 같다) 외의 층에서는 피난층 또는 지상으로 통하는 직통계단(경사로를 포함한다. 이하 같다)을 거실의 각 부분으로부터 계단(거실로부터 가장 가까운 거리에 있는 계단을 말한다)에 이르는 보행거리가 30미터 이하가 되도록 설치하여야 한다. 다만, 건축물(지하층에 설치하는 것으로서 바닥면적의 합계가 300제곱미터 이상인 공연장·집회장·관람장 및 전시장은 제외한다)의 주요구조부가 내화구조 또는 불연재료로 된 건축물은 그 보행거리가 50미터(층수가 16층 이상인 공동주택은 40미터) 이하가 되도록 설치할 수 있으며, 자동화 생산시설에 스프링클러 등 자동식 소화설비를 설치한 공장으로서 국토해양부령으로 정하는 공장인 경우에는 그 보행거리가 75미터(무인화 공장인 경우에는 100미터) 이하가 되도록 설치할 수 있다. <개정 2009.7.16>
// 건축법 시행령 34조 (직통계단의 설치) 1항
Check(EDBA_34_1){
KS
}
KS{
Floor myFloor{
isObjectProperty(Floor.isEscape) = TRUE
}
Space mySpace{
getObjectProperty(Space.usage)="PerformanceHall"
OR getObjectProperty(Space.usage)="AssemblyHall"
OR getObjectProperty(Space.usage)="Auditorium"
OR getObjectProperty(Space.usage)="ExhibitionHall"
}
Door myDoor{
isDirectlyAccessible(Door, Ground)=TRUE
}
Stair myStair{
isObjectProperty(Stair.isDirect)=TRUE
isAccessible(Stair,myFloor)=TRUE
OR isAccessible(Stair,Ground)=TRUE
}
Ramp myRamp{
isAccessible(Ramp,myFloor)=TRUE
OR isAccessible(Ramp,Ground)=TRUE
}
Floor myFloor2{
isObjectProperty(Floor.isEscape)=FALSE
OR hasObject(Floor, myDoor)=FALSE
}
Zone myZone{
isDirectlyAccessible(myStair, Zone)=FALSE
}
IF
getFloorNumber(mySpace)>0
getFloorArea(mySpace)<=300 m2
isFireResistantStructure(MainStructuralPart)=TRUE
OR isObjectProperty(MainStructuralPart.Material.nonCombustibility)=TRUE
THEN IF getBuildingStoriesCount()>=16
getBuildingUsage()="MultiUnitHouse"
THEN ED= 40
ELSE THEN ED=50
END IF
ELSE IF
getBuildingUsage() = "Factory"
isExist(ExtinguishingSystem)=TRUE
isObjectProperty(ExtinguishingSystem.isAutomatic)=TRUE
getResult(REFB_8_2)=TRUE
THEN IF getBuildingUsage() = "UnmannedFactory"
THEN ED=100
ELSE THEN ED=75
END IF
ELSE THEN ED=30
END IF
(hasObject(myFloor,myStair)=TRUE
hasObject(myZone, myStair)=TRUE
getObjectDistance(Room,myStair, 1)<=ED)
OR
(hasObject(myFloor,myRamp)=TRUE
hasObject(myZone, myRamp)=TRUE
getObjectDistance(Room,myRamp, 1)<=ED)
}
max_route_length = 30
def Check():
evac_storey_exist = False
stories = 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:
if storey.SELECT('is evacuation storey').BOOL() == True:
continue
stairs = storey.SELECT('direct stair')
if stairs.COUNT() == 0:
storey.ERROR(storey.SELECT('name').STRING() + '에 직통계단이 존재하지 않습니다.')
continue
for space in storey.SELECT('space'):
route_length = -1
for route in space.SELECT('escape route', stairs):
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.ERROR(space.SELECT('name').STRING() + '부터 직통계단까지의 거리가 멀다 : ' + str(route_length))
else:
space.SUCCESS(space.SELECT('name').STRING() + ' : ' + str(route_length))
③ 층수가 11층 이상인 건축물로서 11층 이상인 층의 바닥면적의 합계가 1만 제곱미터 이상인 건축물(지붕을 평지붕으로 하는 경우만 해당한다)의 옥상에는 국토해양부령으로 정하는 기준에 따라 헬리포트를 설치하거나 헬리콥터를 통하여 인명 등을 구조할 수 있는 공간을 확보하여야 한다. <개정 2009.7.16>
①6층 이상인 공동주택에는 국토교통부령이 정하는 기준에 따라 대당 6인승 이상인 승용승강기를 설치하여야 한다. 다만, 「건축법 시행령」 제89조의 규정에 해당하는 공동주택의 경우에는 그러하지 아니하다. <개정 1992.5.30, 1994.12.23, 1994.12.30, 1999.9.29, 2005.6.30, 2008.2.29, 2013.3.23>
//주택건설기준 등에 관한 규정 15조 (승강기등) 1항
Check(RHC_15_1){
getResult(RHC_15_5) = TRUE AND IF (CS1 AND !CS2) THEN KS
}
CS1{
getBuildingUsage() = "MultiUnitHouse"
getBuildingStoriesCount() >= 6
}
CS2{
getBuildingStoriesCount = 6
Stair myStair{
isObjectProperty(Stair.isDirect) = TRUE
}
getFloorArea() = FA
FA / 300 = FA2
getIntegeralNumber(FA2) = FA3
getObjectCount(myStair) >= FA3
}
KS{
Elevator myElevator{
getObjectProperty(Elevator.occupancy) >= 6
}
isExist(myElevator) = TRUE
}