마. 계단실·노대 또는 부속실에 설치하는 건축물의 바깥쪽에 접하는 창문등(망이 들어 있는 유리의 붙박이창으로서 그 면적이 각각 1제곱미터이하인 것을 제외한다)은 계단실·노대 또는 부속실외의 당해 건축물의 다른 부분에 설치하는 창문등으로부터 2미터 이상의 거리를 두고 설치할 것
③영 제35조제1항에 따른 피난계단 또는 특별피난계단은 돌음계단으로 하여서는 아니되며, 영 제40조에 따라 옥상광장을 설치하여야 하는 건축물의 피난계단 또는 특별피난계단은 해당 건축물의 옥상으로 통하도록 설치하여야 한다. 이 경우 옥상으로 통하는 출입문은 피난방향으로 열리는 구조로서 피난시 이용에 장애가 없어야 한다. <개정 2010.4.7>
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 9조 (피난계단 및 특별피난계단의 구조) 3항
Check(REFB_9_3) {
KS
}
KS {
Stair myStair1{
isObjectProperty(Stair.isEscape)=TRUE
OR isObjectProperty(Stair.isSpecialEscape)=TRUE
}
Space mySpace{
getObjectProperty(Space.usage) = “RooftopPlaza”
}
hasObject(Rooftop, mySpace)=TRUE
}
Stair myStair2{
hasObject(mySpace.Building,myStair1)=TRUE
}
getObjectProperty(myStair.type)!= “WindingStair”
isAccessible(myStair2,mySpace)=TRUE
isEgressDirection(mySpace.Door) = TRUE
}
②영 제39조제1항에 따라 건축물의 바깥쪽으로 나가는 출구를 설치하는 건축물중 문화 및 집회시설(전시장 및 동·식물원을 제외한다), 종교시설, 장례식장 또는 위락시설의 용도에 쓰이는 건축물의 바깥쪽으로의 출구로 쓰이는 문은 안여닫이로 하여서는 아니된다. <개정 2010.4.7>
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 11조 (건축물의 바깥쪽으로의 출구의 설치기준) 2항
Check(REFB_11_2){
IF CS1 AND CS2 THEN KS
}
CS1 {
Building myBuilding{
getBuildingUsage() = “CulturalAndAssemblyFacility”
OR getBuildingUsage() = “ReligiousFacility”
OR getBuildingUsage() = “AmusementFacility”
OR getBuildingUsage() = “FuneralParlor”
getBuildingUsage() != “ExhibitionHall”
getBuildingUsage() != “ZoologicalAndBotanicalGarden”
}
Door myDoor{
isObjectProperty(myBuilding.Door.isEntrance)=TRUE
}
isExist(myDoor) = TRUE
}
KS {
getObjectProperty(myDoor.panelOperationType) != “OpeningInDoor”
}
1. 초등학교의 계단인 경우에는 계단 및 계단참의 너비는 150센티미터 이상, 단높이는 16센티미터 이하, 단너비는 26센티미터 이상으로 할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 2항1호
check(REFB_15_2_1){
IF CS THEN KS
}
CS{
getBuildingUsage()="ElementarySchool"
}
KS{
getObjectWidth(Stair)>= 150 cm
getObjectWidth(StairLanding)>150 cm
getObjectProperty(Stair.riserHeight)>=16 cm
getObjectProperty(Stair.riserWidth)>=26 cm
}
def Check():
for building in SELECT('building'):
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
min_clear_w = 0.6
max_riser_h = 0.0
min_tread_w = 0.0
if bldg_use == '교육연구시설':
min_clear_w = 1.5
min_tread_w = 0.26
if sub_use == '초등학교':
max_riser_h = 0.16
elif sub_use in ['중학교', '고등학교']:
max_riser_h = 0.18
elif (bldg_use == '문화 및 집회시설' and sub_use in ['공연장', '집회장', '관람장']) or (bldg_use == '판매시설'):
min_clear_w = 1.2
else:
min_clear_w = 0.6
for storey in building.SELECT('storey'):
for stair in storey.SELECT('stair'):
clear_width = stair.SELECT('clear width').UNIT('m')
clear_w = clear_width.NUMBER()
if clear_w < min_clear_w:
clear_width.ERROR('유효너비: ' + str(clear_w) + ' < ' + str(min_clear_w))
else:
clear_width.SUCCESS('유효너비: ' + str(clear_w) + ' >= ' + str(min_clear_w))
if max_riser_h > 0:
for riser_height in stair.SELECT('riser height'):
riser_h = riser_height.UNIT('m').NUMBER()
if riser_h > max_riser_h:
riser_height.ERROR('단높이: ' + str(riser_h) + ' > ' + str(max_riser_h))
break
if min_tread_w > 0:
for tread_width in stair.SELECT('tread width'):
tread_w = tread_width.UNIT('m').NUMBER()
if tread_w < min_tread_w:
tread_width.ERROR('단너비: ' + str(tread_w) + ' < ' + str(min_tread_w))
break
2. 중·고등학교의 계단인 경우에는 계단 및 계단참의 너비는 150센티미터 이상, 단높이는 18센티미터 이하, 단너비는 26센티미터 이상으로 할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 2항2호
check(REFB_15_2_2){
IF CS THEN KS
}
CS{
getBuildingUsage()="MiddleSchool"
OR getBuildingUsage()="HighSchool"
}
KS{
getObjectWidth(Stair)>=150 cm
getObjectWidth(StairLanding)>150 cm
getObjectProperty(Stair.riserHeight)>=18 cm
getObjectProperty(Stair.riserWidth)>=26 cm
}
def Check():
for building in SELECT('building'):
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
min_clear_w = 0.6
max_riser_h = 0.0
min_tread_w = 0.0
if bldg_use == '교육연구시설':
min_clear_w = 1.5
min_tread_w = 0.26
if sub_use == '초등학교':
max_riser_h = 0.16
elif sub_use in ['중학교', '고등학교']:
max_riser_h = 0.18
elif (bldg_use == '문화 및 집회시설' and sub_use in ['공연장', '집회장', '관람장']) or (bldg_use == '판매시설'):
min_clear_w = 1.2
else:
min_clear_w = 0.6
for storey in building.SELECT('storey'):
for stair in storey.SELECT('stair'):
clear_width = stair.SELECT('clear width').UNIT('m')
clear_w = clear_width.NUMBER()
if clear_w < min_clear_w:
clear_width.ERROR('유효너비: ' + str(clear_w) + ' < ' + str(min_clear_w))
else:
clear_width.SUCCESS('유효너비: ' + str(clear_w) + ' >= ' + str(min_clear_w))
if max_riser_h > 0:
for riser_height in stair.SELECT('riser height'):
riser_h = riser_height.UNIT('m').NUMBER()
if riser_h > max_riser_h:
riser_height.ERROR('단높이: ' + str(riser_h) + ' > ' + str(max_riser_h))
break
if min_tread_w > 0:
for tread_width in stair.SELECT('tread width'):
tread_w = tread_width.UNIT('m').NUMBER()
if tread_w < min_tread_w:
tread_width.ERROR('단너비: ' + str(tread_w) + ' < ' + str(min_tread_w))
break
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조의2 (복도의 너비 및 설치기준) 2항1호
check(REFB_15-2_2_1){
KS
}
KS{
IF getTotalFloorArea(Corridor.Floor.Space)<500 m2
THEN getObjectProperty(Corridor.effectiveWidth)>=1.5 m
END IF
}
corridor_code = '33105'
std_floor_area = 200
corridor_code_label = '복도 공간분류코드'
std_floor_area_label = '기준 연면적'
def Check():
for building in SELECT('building'):
if building.SELECT('prop', '연면적').NUMBER() <= std_floor_area:
continue
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
if not ((bldg_use == '문화 및 집회시설' and sub_use in ['공연장' ,'집회장', '관람장', '전시장'])
or (bldg_use == '종교시설' and sub_use == '종교집회장')
or (bldg_use == '노유자시설' and sub_use in ['아동관련시설' ,'노인복지시설'])
or (bldg_use == '수련시설' and sub_use == '생활권수련시설')
or (bldg_use == '위락시설' and sub_use == '유흥주점')
or (bldg_use == '장례시설' and sub_use == '장례식장')):
continue
for storey in building.SELECT('storey'):
area = 0.0
corridors = []
for space in storey.SELECT('space'):
if space.SELECT('class code').STRING() == corridor_code:
corridors.append(space)
area += space.SELECT('area').UNIT('m2').NUMBER()
min_cor_w = 1.8
if area < 500:
min_cor_w = 1.5
elif area >= 1000:
min_cor_w = 2.4
for space in corridors:
width = space.SELECT('min clear width').UNIT('m')
w = width.NUMBER()
if w < min_cor_w:
width.ERROR('유효너비: ' + str(w) + ' < ' + str(min_cor_w))
else:
width.SUCCESS('유효너비: ' + str(w) + ' >= ' + str(min_cor_w))
2. 당해 층의 바닥면적의 합계가 500제곱미터 이상 1천제곱미터 미만인 경우 1.8미터 이상
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조의2 (복도의 너비 및 설치기준) 2항2호
check(REFB_15-2_2_2){
KS
}
KS{
IF getTotalFloorArea(Corridor.Floor.Space)>=500 m2
getTotalFloorArea(Corridor.Floor.Space)<1000 m2
THEN getObjectProperty(Corridor.effectiveWidth)>=1.8 m
END IF
}
corridor_code = '33105'
std_floor_area = 200
corridor_code_label = '복도 공간분류코드'
std_floor_area_label = '기준 연면적'
def Check():
for building in SELECT('building'):
if building.SELECT('prop', '연면적').NUMBER() <= std_floor_area:
continue
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
if not ((bldg_use == '문화 및 집회시설' and sub_use in ['공연장' ,'집회장', '관람장', '전시장'])
or (bldg_use == '종교시설' and sub_use == '종교집회장')
or (bldg_use == '노유자시설' and sub_use in ['아동관련시설' ,'노인복지시설'])
or (bldg_use == '수련시설' and sub_use == '생활권수련시설')
or (bldg_use == '위락시설' and sub_use == '유흥주점')
or (bldg_use == '장례시설' and sub_use == '장례식장')):
continue
for storey in building.SELECT('storey'):
area = 0.0
corridors = []
for space in storey.SELECT('space'):
if space.SELECT('class code').STRING() == corridor_code:
corridors.append(space)
area += space.SELECT('area').UNIT('m2').NUMBER()
min_cor_w = 1.8
if area < 500:
min_cor_w = 1.5
elif area >= 1000:
min_cor_w = 2.4
for space in corridors:
width = space.SELECT('min clear width').UNIT('m')
w = width.NUMBER()
if w < min_cor_w:
width.ERROR('유효너비: ' + str(w) + ' < ' + str(min_cor_w))
else:
width.SUCCESS('유효너비: ' + str(w) + ' >= ' + str(min_cor_w))
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조의2 (복도의 너비 및 설치기준) 2항3호
Check(REFB_15-2_2_3){
KS
}
KS{
IF getTotalFloorArea(Corridor.Floor.Space)>=1000 m2
THEN getObjectProperty(Corridor.effectiveWidth)>=2.4 m
END IF
}
corridor_code = '33105'
std_floor_area = 200
corridor_code_label = '복도 공간분류코드'
std_floor_area_label = '기준 연면적'
def Check():
for building in SELECT('building'):
if building.SELECT('prop', '연면적').NUMBER() <= std_floor_area:
continue
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
if not ((bldg_use == '문화 및 집회시설' and sub_use in ['공연장' ,'집회장', '관람장', '전시장'])
or (bldg_use == '종교시설' and sub_use == '종교집회장')
or (bldg_use == '노유자시설' and sub_use in ['아동관련시설' ,'노인복지시설'])
or (bldg_use == '수련시설' and sub_use == '생활권수련시설')
or (bldg_use == '위락시설' and sub_use == '유흥주점')
or (bldg_use == '장례시설' and sub_use == '장례식장')):
continue
for storey in building.SELECT('storey'):
area = 0.0
corridors = []
for space in storey.SELECT('space'):
if space.SELECT('class code').STRING() == corridor_code:
corridors.append(space)
area += space.SELECT('area').UNIT('m2').NUMBER()
min_cor_w = 1.8
if area < 500:
min_cor_w = 1.5
elif area >= 1000:
min_cor_w = 2.4
for space in corridors:
width = space.SELECT('min clear width').UNIT('m')
w = width.NUMBER()
if w < min_cor_w:
width.ERROR('유효너비: ' + str(w) + ' < ' + str(min_cor_w))
else:
width.SUCCESS('유효너비: ' + str(w) + ' >= ' + str(min_cor_w))
①법 제52조제1항에 따라 영 제61조제1항 각 호의 건축물에 대하여는 그 거실의 벽 및 반자의 실내에 접하는 부분(반자돌림대·창대 기타 이와 유사한 것을 제외한다. 이하 이 조에서 같다)의 마감은 불연재료·준불연재료 또는 난연재료로 하여야 하며, 그 거실에서 지상으로 통하는 주된 복도·계단 기타 통로의 벽 및 반자의 실내에 접하는 부분의 마감은 불연재료 또는 준불연재료로 하여야 한다. <개정 2005.7.22, 2010.4.7, 2010.12.30>
check(REFB_24_1){
KS}
KS{
(check(EDBA_61_1_1)=TRUE
OR check(EDBA_61_1_2)=TRUE
OR check(EDBA_61_1_3)=TRUE
OR check(EDBA_61_1_4)=TRUE)
OR check(EDBA_61_1_5)=TRUE)
OR check(EDBA_61_1_6)=TRUE)
OR check(EDBA_61_1_7)=TRUE)
AND (getObjectProperty(Room.Wall.Material.noncombustible)= TRUE
AND (getObjectProperty(CeilingCornice | WindowSill.Material.noncombustible)= TRUE
OR !(getObjectProperty(CeilingCornice | WindowSill.Material.noncombustiblel)= TRUE)
AND (isGoThrough(Room, Corridor | Stair | Passage,Ground)= TRUE
AND (isFireResistant(getWall(Corridor))=TRUE
AND isFireResistant(getWall(Stair))=TRUE
AND isFireResistant(getWall(Passage))=TRUE
AND isFireResistant(getObject(CeilingCovering))=TRUE)
}
가. 건축물의 내부와 계단실은 노대를 통하여 연결하거나 외부를 향하여 열 수 있는 면적 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)
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 4호
Check(REFB_13_3_4){
KS
}
KS{
isObjectProperty(Door.isEntrance)=True
getObjectProperty( myDoor.effectiveWidth) > 0.9 m
isObjectProperty(Door.isStrictFireproofDoor)=True
② 영 제34조제1항 단서에서 "국토교통부령으로 정하는 공장"이란 반도체 및 디스플레이 패널을 제조하는 공장을 말한다. <신설 2010.4.7, 2013.3.23>
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 8조 (직통계단의 설치기준) 2항
Check(REFB_8_2){
getObjectProperty(Building.usage)=“Factory.SemiconductorAndDisplayPanelManufacturingFactory"
}
①영 제48조의 규정에 의하여 건축물에 설치하는 복도의 유효너비는 다음 표와 같이 하여야 한다
┌───────────────┬────────────┬──────┐
│구분 │양옆에 거실이 있는 복도 │기타의 복도 │
├───────────────┼────────────┼──────┤
│유치원ㆍ초등학교 │2.4미터 이상 │1.8미터 이상│
│중학교ㆍ고등학교 │ │ │
├───────────────┼────────────┼──────┤
│공동주택ㆍ오피스텔 │1.8미터 이상 │1.2미터 이상│
├───────────────┼────────────┼──────┤
│당해 층 거실의 바닥면적 │1.5미터 이상(의료시설의 │1.2미터 이상│
│합계가 200제곱미터 이상인 경우│복도 1.8미터 이상) │ │
└───────────────┴────────────┴──────┘
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조의2 (복도의 너비 및 설치기준) 1항
Check(EDBA_15-2_1){
IF getBuildingUsage()="Kindergarten"
OR getBuildingUsage()="ElementarySchool"
OR getBuildingUsage()="MiddleSchool"
OR getBuildingUsage()="HightSchool"
THEN IF isExternal(Corridor)=FALSE
THEN getObjectProperty(Corridor.effectiveWidth)>2.4 m
ELSE THEN getObjectProperty(Corridor.effectiveWidth)>1.8 m
END IF
END IF
IF getBuildingUsage()="MultiUnitHouse"
OR getBuildingUsage()="Officetel"
THEN IF isExternal(Corridor)=FALSE
THEN getObjectProperty(Corridor.effectiveWidth)>1.8 m
ELSE THEN getObjectProperty(Corridor.effectiveWidth)>1.2 m
END IF
END IF
IF getTotalFloorArea(Corridor.Floor.Room)>200 m2
THEN IF isExternal(Corridor)=FALSE
THEN IF getBuildingUsage()="MedicalFacilities"
THEN getObjectProperty(Corridor.effectiveWidth)>1.8 m
ELSE THEN getObjectProperty(Corridor.effectiveWidth)>1.5 m
END IF
ELSE THEN getObjectProperty(Corridor.effectiveWidth)>1.2 m
END IF
END IF
}
제20조의2 (내화구조의 적용이 제외되는 공장건축물) 영 제56조제1항제3호 단서에서 "국토해양부령으로 정하는 공장"이란 별표 2의 업종에 해당하는 공장으로서 주요구조부가 불연재료로 되어 있는 2층 이하의 공장을 말한다. <개정 2005.7.22, 2008.3.14, 2009.7.1>
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 3조 (내화구조) 1호 가목
Check (REFB_3_0_1_가){
KS
}
KS{
getObjectProperty(Wall.Structure.materialType) = "ReinforcedConcrete" OR "SteelFramedReinforcedConcrete"
getWallThickness(Wall) >= 10cm
}
Check(EDBA_41_1_1){
IF (CS) THEN KS END IF
}
CS{
getObjectProperty(Building.usage)="DetachedHouse"
}
KS{
getObjectProperty(Passage.effectiveWidth)> 0.9M
}
def Check():
if SELECT("building type").STRING() == "DetachedHouse":
passage = SELECT("passage")
if passage.SELECT("clear width").UNIT("m").NUMBER()> 0.9:
passage.SUCCESS("pass")
else:
passage.ERROR("fail")
Check(EDBA_41_1_3){
IF (CS) THEN KS END IF
}
CS{
Building.usage !="DetachedHouse"
OR Building.usage !="CulturalAndAssemblyFacility"
OR Building.usage !="ReligiousFacility"
OR Building.usage !="MedicalFacility"
OR Building.usage !="AmusementFacility"
OR Building.usage !="FuneralParlor"
}
KS{
getObjectProperty(Passage.effectiveWidth)> 1.5m ;
}
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))
①건축물의 대지 안에는 그 건축물 바깥쪽으로 통하는 주된 출구와 지상으로 통하는 피난계단 및 특별피난계단으로부터 도로 또는 공지(공원, 광장, 그 밖에 이와 비슷한 것으로서 피난 및 소화를 위하여 해당 대지의 출입에 지장이 없는 것을 말한다. 이하 이 조에서 같다)로 통하는 통로를 다음 각 호의 기준에 따라 설치하여야 한다. <개정 2010.12.13, 2015.9.22, 2016.5.17, 2017.2.3>
min_floor_area = 200
min_floor_area_label = "Minimum total floor area"
def Check():
num = 0
for storey in SELECT('storey'):
if num >= 5:
area_sum = 0
for space in storey.SELECT('space'):
area_sum += space.SELECT('area').UNIT('m2').NUMBER()
if area_sum >= min_floor_area:
storey.SUCCESS("Total floor area:"+ str(area_sum) + 'm2')
else:
storey.FAIL("Total floor area:"+ str(area_sum) + 'm2')
num += 1
⑤ 제4항에도 불구하고 아파트의 4층 이상인 층에서 발코니에 설치하는 인접 세대와의 경계벽이 파괴하기 쉬운 경량구조 등이거나 경계벽에 피난구를 설치한 경우에는 대피공간을 설치하지 아니할 수 있다.
//건축법 시행령 46조 (방화구획의 설치) 5항
Check(EDBA_5){
CS
}
Space mySpace{
Space.isEscape = TRUE
}
CS{getObjectProperty(Building.usage)="ApartmentHouses"
AND isExist(Balcony)=TRUE
AND (hasObject(Balcony,Structure)=TRUE
AND (getResult(EDBA_5_1)=TRUE
or getResult(EDBA_5_2)=TRUE
or getResult(EDBA_5_3)=TRUE)
AND isExist(mySpace)=FALSE
}
① 법 제50조제2항에 따라 연면적 1천 제곱미터 이상인 건축물은 방화벽으로 구획하되, 각 구획된 바닥면적의 합계는 1천 제곱미터 미만이어야 한다. 다만, 주요구조부가 내화구조이거나 불연재료인 건축물과 제56조제1항제5호 단서에 따른 건축물 또는 내부설비의 구조상 방화벽으로 구획할 수 없는 창고시설의 경우에는 그러하지 아니하다.
// 건축법 시행령 57조 ( 대규모 건축물의 방화벽 등) 1항
Check(EDBA_57_1){
IF (CS1 AND CS2) THEN KS
}
CS1{
getObjectProperty(MainStructuralPart.isFireResistantStructure) = TRUE
OR getObjectProperty(MainStructuralPart.Material.nonCombustibility) = TRUE
OR getResult(EDBA_56_1_5) = TRUE
}
CS2{
getObjectProperty(Building.grossFloorArea) >= 1000m2
}
KS{
Space mySpace{
getFloorArea(Space) < 1000m2
}
Space mySpace2{
Space != mySpace
}
Wall myWall{
isObjectProperty(Wall.isFireProofWall) = TRUE
}
isPartitioned(mySpace, mySpace2, myWall) = TRUE
}
def Check():
for building in SELECT('building'):
for space in building.SELECT('space'):
dist = space.SELECT('ceiling height')
height = dist.UNIT('m').NUMBER()
return height
① 건축물의 피난층(직접 지상으로 통하는 출입구가 있는 층을 말한다. 이하 같다) 외의 층에서는 피난층 또는 지상으로 통하는 직통계단(경사로를 포함한다. 이하 같다)을 거실의 각 부분으로부터 계단(거실로부터 가장 가까운 거리에 있는 계단을 말한다)에 이르는 보행거리가 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))
2. 단독주택 중 다중주택·다가구주택, 제2종 근린생활시설 중 학원·독서실, 판매시설, 운수시설(여객용 시설만 해당한다), 의료시설(입원실이 없는 치과병원은 제외한다), 교육연구시설 중 학원, 노유자시설 중 아동 관련 시설·노인복지시설, 수련시설 중 유스호스텔, 숙박시설 또는 장례식장의 용도로 쓰는 3층 이상의 층으로서 그 층의 해당 용도로 쓰는 거실의 바닥면적의 합계가 200제곱미터 이상인 것
//건축법 시행령 34조 (직통계단의 설치) 2항2호
Check(EDBA_34_2_2){
Building myBuilding{
getBuildingUsage()="DentalClinic"
}
Space mySpace{
getSpaceUsage() = "Ward"
}
Floor myFloor1 {
getObjectProperty(Floor.number)>=3
getObjectUsage(Floor) = “DetachedHouse.MultiUserHouse”
OR getObjectUsage(Floor) = “DetachedHouse.MultiFamilyHouse”
OR getObjectUsage(Floor) = “ClassIINeighborhoodLivingFacility.EducationalInstitute”
OR getObjectUsage(Floor) = “ClassIINeighborhoodLivingFacility.ReadingRooms”
OR getObjectUsage(Floor) = “CommercialFacility”
OR getObjectUsage(Floor) = “TransportationFacility.PassengerTrafficFacilities”
OR ( getObjectUsage(Floor) = “MedicalFacility” ADN hasObject(myBuilding, mySpace)=TRUE )
OR getObjectUsage(Floor) = “EducationAndResearchFacility.EducationalInstitutes”
OR getObjectUsage(Floor) = “FacilitiesForTheAgedAndChildren.ChildrenRelatedFacilities”
OR getObjectUsage(Floor) = “EducationAndResearchFacility.WelfareFacilityForTheAged”
OR getObjectUsage(Floor) = “Trainingfacility.YouthHostel”
OR getObjectUsage(Floor) = “LodgingFacility”
}
Floor myFloor2{
getObjectUsage(Floor) = “ClassIINeighborhoodLivingFacility.FacilityForProvidingInternetComputerGameService”
}
getTotalFloorArea(myFloor1.Room)>= 200 m2
OR getTotalFloorArea(myFloor2.Room)>= 300 m2
}
//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 1항 1호 가목
Check(LPUA_77_1_1_1){
IF CS THEN KS
}
CS{
getObjectProperty(SpecialPurposeArea.type) = "ResidentialArea"
}
KS{
getObjectProperty(Building.buildingToLandRatio) = BTL
BTL <= 70
}
//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 1항 1호 나목
Check(LPUA_77_1_1_2){
IF CS THEN KS
}
CS{
getObjectProperty(SpecialPurposeArea.type) = "CommercialArea"
}
KS{
getObjectProperty(Building.buildingToLandRatio) = BTL
BTL <= 90
}
//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 1항 1호 다목
Check(LPUA_77_1_1_3){
IF CS THEN KS
}
CS{
getObjectProperty(SpecialPurposeArea.type) = "IndustrialArea"
}
KS{
getObjectProperty(Building.buildingToLandRatio) = BTL
BTL <= 70
}
//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 1항 1호 라목
Check(LPUA_77_1_1_4){
IF CS THEN KS
}
CS{
getObjectProperty(SpecialPurposeArea.type) = "GreenArea"
}
KS{
getObjectProperty(Building.buildingToLandRatio) = BTL
BTL <= 20
}
//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 1항 3호
Check(LPUA_77_1_3){
IF CS THEN KS
}
CS{
getObjectProperty(SpecialPurposeArea.type) = "AgriculturalAndForestryArea"
}
KS{
getObjectProperty(Building.buildingToLandRatio) = BTL
BTL <= 20
}
//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 1항 4호
Check(LPUA_77_1_4){
IF CS THEN KS
}
CS{
getObjectProperty(SpecialPurposeArea.type) = "NaturalEnvironmentConservationArea"
}
KS{
getObjectProperty(Building.buildingToLandRatio) = BTL
BTL <= 20
}
// 국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 3항 5호
Check(LPUA_J77_3_5){
KS
}
KS{
getObjectProperty(SpecialPurposeZone.type) = "AgriculturalAndIndustrialComplexes"
}
6. 공업지역에 있는 「산업입지 및 개발에 관한 법률」 제2조제8호가목부터 다목까지의 규정에 따른 국가산업단지, 일반산업단지 및 도시첨단산업단지와 같은 조 제12호에 따른 준산업단지
//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 3항 6호
Check(LPUA_77_3_6){
KS
}
KS{
getObjectProperty(SpecialPurposeZone.type) = "NationalIndustrialComplexes"
OR getObjectProperty(SpecialPurposeZone.type) = "GeneralIndustrialComplexes"
OR getObjectProperty(SpecialPurposeZone.type) = "UrbanHighTechIndustrialComplexes"
OR getObjectProperty(SpecialPurposeZone.type) = "SemiIndustrialComplex"
}
③ 다음 각 호의 어느 하나에 해당하는 지역에서의 건폐율에 관한 기준은 제1항과 제2항에도 불구하고 80퍼센트 이하의 범위에서 대통령령으로 정하는 기준에 따라 특별시ㆍ광역시ㆍ특별자치시ㆍ특별자치도ㆍ시 또는 군의 조례로 따로 정한다. <개정 2011.4.14, 2011.8.4, 2015.8.11, 2017.4.18>
//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 3항
Check(LPUA_77_3){
IF CS THEN KS
}
CS{
getResult(LPUA_77_3_1) = TRUE
OR getResult(LPUA_77_3_2) = TRUE
OR getResult(LPUA_77_3_3) = TRUE
OR getResult(LPUA_77_3_4) = TRUE
OR getResult(LPUA_77_3_5) = TRUE
OR getResult(LPUA_77_3_6) = TRUE
}
KS{
getObjectProperty(Building.buildingToLandRatio) = BTL
BTL <= 80
}
//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 3항 1호
Check(LPUA_77_3_1){
KS
}
KS{
getResult(LPUA_37_1_8) = TRUE
getObjectProperty(SpecialPurposeDistrict.type) = "SettlementDistrict"
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 1호
Check(LPUA_78_1_1){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "UrbanArea"
}
KS{
getResult(LPUA_78_1_1_가)=TRUE
OR getResult(LPUA_78_1_1_나)=TRUE
OR getResult(LPUA_78_1_1_다)=TRUE
OR getResult(LPUA_78_1_1_라)=TRUE
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 1호 가목
Check(LPUA_78_1_1_가){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "ResidentialArea"
}
KS{
getFloorAreaRatio() <= 500%
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 1호 나목
Check(LPUA_78_1_1_나){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "CommercialArea"
}
KS{
getFloorAreaRatio() <= 1500%
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 1호 다목
Check(LPUA_78_1_1_다){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "IndustrialArea"
}
KS{
getFloorAreaRatio() <= 400%
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 1호 라목
Check(LPUA_78_1_1_라){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "GreenArea"
}
KS{
getFloorAreaRatio() <= 100%
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 2호
Check(LPUA_78_1_2){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "ControlArea"
}
KS{
getResult(LPUA_78_1_2_가)=TRUE
OR getResult(LPUA_78_1_2_나)=TRUE
OR getResult(LPUA_78_1_2_다)=TRUE
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 2호 가목
Check(LPUA_78_1_2_가){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "ConservationManagementArea"
}
KS{
getFloorAreaRatio() <= 80%
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 2호 나목
Check(LPUA_78_1_2_나){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "ProductionManagementArea"
}
KS{
getFloorAreaRatio() <= 80%
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 2호 다목
Check(LPUA_78_1_2_다){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "PlanningManagementArea"
}
KS{
getFloorAreaRatio() <=100%
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 3호
Check(LPUA_78_1_3){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "AgriculturalAndForestryArea"
}
KS{
getFloorAreaRatio() <= 80%
}
// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항 4호
Check(LPUA_78_1_4){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeArea.type) = "NaturalEnvironmentConservationArea"
}
KS{
getFloorAreaRatio() <= 80%
}
//국토의 계획 및 이용에 관한 법률 시행령 84조 (용도지역안에서의 건폐율) 3항 2호
Check(EDLPUA_84_3_2){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeDistrict.type)="DevelopmentPromotionDistrict"
}
KS{
getBuildingToLandRatio()<=40%
}
⑩제1항 내지 제4항 및 제7항의 규정에 의하여 완화하여 적용되는 건폐율 및 용적률은 당해 용도지역 또는 용도지구에 적용되는 건폐율의 150퍼센트 및 용적률의 200퍼센트를 각각 초과할 수 없다. <개정 2004.1.20.>
//국토의 계획 및 이용에 관한 법률 시행령 46조 (도시지역 내 지구단위계획구역에서의 건폐율 등의 완화적용) 10항
Check(EDLPUA_46_10){
IF CS THEN KS
}
CS{
getResult(EDLPUA_46_1)=TRUE
OR getResult(EDLPUA_46_2)=TRUE
OR getResult(EDLPUA_46_3)=TRUE
OR getResult(EDLPUA_46_4)=TRUE
OR getResult(EDLPUA_46_7)=TRUE
}
KS{
BBTR = getObjectProperty(Building.buildingToLandRatio)
BFAR = getObjectProperty(Building.floorAreaRatio)
(BBTR < 1.5*getObjectProperty(Building.SpecialPurposeArea.buildingToLandRatio)
OR BBTR < 1.5*getObjectProperty(Building.SpecialPurposeZone.buildingToLandRatio))
(BFAR < 2*getObjectProperty(Building.SpecialPurposeArea.floorAreaRatio)
OR BFAR < 2*getObjectProperty(Building.SpecialPurposeZone.floorAreaRatio))
}
①지구단위계획구역(도시지역 외에 지정하는 경우로 한정한다. 이하 이 조에서 같다)에서는 법 제52조제3항에 따라 지구단위계획으로 당해 용도지역 또는 개발진흥지구에 적용되는 건폐율의 150퍼센트 및 용적률의 200퍼센트 이내에서 건폐율 및 용적률을 완화하여 적용할 수 있다. <개정 2005.1.15, 2007.4.19, 2012.4.10>
//EDLPUA 47조 1항
Check(EDLPUA_47_1){
IF CS THEN KS
}
CS{
getObjectUsage(Zone)="DistrictUnitPlanningZones"
}
KS{
SpecialPurposeArea mySpecialPurposeArea{
getObjectProperty(Building.SpecialPurposeArea.type) = "DevelopmentPromotionDistrict"
}
BLR= getObjectProperty(Building.SpecialPurposeArea.buildingToLandRatio) OR getObjectProperty(mySpecialPurposeArea.buildingToLandRatio)
FAR= getObjectProperty(Building.SpecialPurposeArea.floorAreaRatio) OR getObjectProperty(mySpecialPurposeArea.floorAreaRatio)
getBuildingToLandRatio()<=BLR*150%
getFloorAreaRatio(FAR)<=200%
}
⑧ 제1항에도 불구하고 자연녹지지역에 설치되는 도시·군계획시설 중 유원지의 건폐율은 30퍼센트의 범위에서 도시·군계획조례로 정하는 비율을 초과하여서는 아니 되며, 공원의 건폐율은 20퍼센트의 범위에서 도시·군계획조례로 정하는 비율을 초과하여서는 아니 된다. <개정 2009.7.7, 2011.9.16, 2012.4.10>
//국토의 계획 및 이용에 관한 법률 시행령 84조 (용도지역안에서의 건폐율) 8항
Check(EDLPUA_84_8){
KS
}
KS{
IF getObjectProperty(GreenNaturalArea.UrbanAndGunPlanningFacility.type)="AmusementPark"
THEN getBuildingToLandRatio() <30
getResult(Unimplemented_UPMO)
ELSE IF getObjectProperty(GreenNaturalArea.UrbanAndGunPlanningFacility.type)="Park"
THEN getBuildingToLandRatio() <30
getResult(Unimplemented_UPMO)
END IF
}
1. 취락지구 : 60퍼센트 이하(집단취락지구에 대하여는 개발제한구역의지정및관리에관한특별조치법령이 정하는 바에 의한다)
//국토의 계획 및 이용에 관한 법률 시행령 84조 (용도지역안에서의 건폐율) 3항 1호
Check(EDLPUA_84_3_1){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeDistrict.type)="SettlementDistrict"
}
KS{
getBuildingToLandRatio()<=60%
}
//국토의 계획 및 이용에 관한 법률 시행령 84조 (용도지역안에서의 건폐율) 3항 3호
Check(EDLPUA_84_3_3){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeDistrict.type)="FisheryResourcesProtectionZone"
}
KS{
getBuildingToLandRatio()<=40%
}
//국토의 계획 및 이용에 관한 법률 시행령 84조 (용도지역안에서의 건폐율) 3항 4호
Check(EDLPUA_84_3_4){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeDistrict.type)="ParkProtectionZone"
}
KS{
getBuildingToLandRatio()<=60%
}
5. 「산업입지 및 개발에 관한 법률」 제2조제8호라목에 따른 농공단지 : 70퍼센트 이하
//국토의 계획 및 이용에 관한 법률 시행령 84조 (용도지역안에서의 건폐율) 3항 5호
Check(EDLPUA_84_3_5){
IF CS THEN KS
}
CS{
getObjectProperty(Building.SpecialPurposeDistrict.type)="AgriculturalIndustrialComplex"
}
KS{
getBuildingToLandRatio()<=70%
}
6. 공업지역에 있는 「산업입지 및 개발에 관한 법률」 제2조제8호가목부터 다목까지의 규정에 따른 국가산업단지ㆍ일반산업단지ㆍ도시첨단산업단지 및 같은 조 제12호에 따른 준산업단지: 80퍼센트 이하
//국토의 계획 및 이용에 관한 법률 시행령 84조 (용도지역안에서의 건폐율) 3항 6호
Check(EDLPUA_84_3_6){
IF CS THEN KS
}
CS{
getObjectProperty(IndustrialComplex.type)="NationalIndustrialComplex"
OR getObjectProperty(IndustrialComplex.type)="GeneralIndustrialComplex"
OR getObjectProperty(IndustrialComplex.type)="UrbanHighTechIndustrialComplex"
OR getObjectProperty(IndustrialComplex.type)="Semi-IndustrialComplex"
}
KS{
getBuildingToLandRatio()<=70%
}
4. 「산업입지 및 개발에 관한 법률」 제2조제8호라목에 따른 농공단지(도시지역외의 지역에 지정된 농공단지에 한한다) : 150퍼센트 이하
// 국토의 계획 및 이용에 관한 법률 시행령 85조 (용도지역 안에서의 용적률) 6항 4호
Check(EDLPUA_85_6_4){
IF CS THEN KS
}
CS{
getObjectProperty(IndustrialComplex.type) = "AgriculturalIndustrialComplex"
}
KS{
getFloorAreaRatio() <= 150%
}