//건축물의 설비기준 등에 관한 규칙 9조 (비상용승강기를 설치하지 아니할 수 있는 건축물) 1호
Check(RFB_9_0_1){
KS
}
KS{
Floor myFloor{
getObjectHeight(Floor)>31 m
}
hasObject(myFloor, Room)=FALSE
}
//스프링클러설비의 화재안전기준 10조 (헤드) 8항
check(NFSC103_10_8){
(IF !(CS1) THEN KS1) or (IF CS1 THEN KS2)
}
KS1{
Beam myBeam{
hasObject(SpecificFireFightingBuilding, Beam) = TRUE
}
getElementDistance(myBeam, SprinklerHead, 1) = TRUE
//Table
getElementDistance(SprinklerHead.Deflector, Beam, a) + getObjectWidth(SprinklerHead.Deflector)*0.5 = SBD
getObjectVerticalDistance(SprinklerHead.Deflector, Beam.BottomSurface, a) = SHD
IF SBD < 0.75 m
THEN SHD < getObjectHeight(Beam.BottomSurface)
IF 0.75 m <= SBD < 1 m
THEN SHD < 0.1 m
IF 1 m <= SBD < 1.5 m
THEN SHD < 0.15 m
IF SBD >= 1.5 m
THEN SHD < 0.3 m
}
CS1{
getObjectDistance(Ceiling.Surface, Beam.BottomSurface) > 55 cm
getObjectDistance(Beam.BottomSideSurface, SprinklerHead) = OD
OD <= getElementDistance(SprinklerHead, c)*0.5
}
KS2{
getObjectDistance(SprinklerHead, SprinklerHead.AttachingToSurface) <= 55 cm
}
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
제14조의2(복합건축물의 피난시설 등) 영 제47조제1항 단서의 규정에 의하여 같은 건축물안에 공동주택ㆍ의료시설ㆍ아동관련시설 또는 노인복지시설(이하 이 조에서 "공동주택등"이라 한다)중 하나 이상과 위락시설ㆍ위험물저장 및 처리시설ㆍ공장 또는 자동차정비공장(이하 이 조에서 "위락시설등"이라 한다)중 하나 이상을 함께 설치하고자 하는 경우에는 다음 각 호의 기준에 적합하여야 한다. <개정 2005.7.22.>
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 14조의2 (복합건축물의 피난시설 등)
Check(REFB_14-2){
IF CS THEN KS
}
CS{
Building myBuilding1{
Building.usage = "MultiUnitHouse"
OR Building.usage = "MedicalFacility"
OR Building.usage = "ChildrenRelatedFacility"
OR Building.usage = "WelfareFacilityForTheAged"
}
Building myBuilding2{
Building.usage = "AmusementFacility"
OR Building.usage = "FacilityForStorageAndTreatmentOfDangerousSubstance"
OR Building.usage = "Factory"
OR Building.usage = "AutomobileRepairShop"
}
hasObject(Building, myBuilding1) = TRUE
hasObject(Building, myBuilding2) = TRUE
}
KS{
getResult(REFB_14-2_0_1)=True
getResult(REFB_14-2_0_2)=True
getResult(REFB_14-2_0_3)=True
getResult(REFB_14-2_0_4)=True
getResult(REFB_14-2_0_5)=True
}
③영 제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
}
⑤다음 각 호의 어느 하나에 해당하는 건축물의 피난층 또는 피난층의 승강장으로부터 건축물의 바깥쪽에 이르는 통로에는 제15조제5항에 따른 경사로를 설치하여야 한다. <개정 2010.4.7>
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 11조 (건축물의 바깥쪽으로의 출구의 설치기준) 5항
Check(REFB_11_5){
IF CS1 AND CS2 THEN KS
}
CS1 {
getResult(REFB_11_5_1)=TRUE
OR getResult(REFB_11_5_2)=TRUE
OR getResult(REFB_11_5_3)=TRUE
OR getResult(REFB_11_5_4)=TRUE
OR getResult(REFB_11_5_5)=TRUE
OR getResult(REFB_11_5_6)=TRUE
}
CS2{
Floor myFloor{
isObjectProperty(Floor.isEscape)=TRUE
}
Passage myPassage{
isDirectlyAccessible(myFloor,Passage) = TRUE
OR isDirectlyAccessible(myFloor.Platform,Passage) = TRUE
isConnectedToExternal(Passage) = TRUE
}
isExist(myPassage)=TRUE
}
KS{
hasObject(myPassage,Ramp)=TRUE
getResult(REFB_15_5)=TRUE
}
3. 너비가 3미터를 넘는 계단에는 계단의 중간에 너비 3미터 이내마다 난간을 설치할 것. 다만, 계단의 단높이가 15센티미터 이하이고, 계단의 단너비가 30센티미터 이상인 경우에는 그러하지 아니하다.
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 1항3호
check(REFB_15_1_3){
IF !CS THEN KS
}
CS{
getStairStepHeight()<=15 cm
getStairStepWidth()>=30 cm
}
KS{
IF getObjectWidth(Stair)>=3 m
THEN hasObject(Stair, Railing) = TRUE
N=getObjectWidth(Stair)/3
getObjectCount(Railing)>=N
IF N>1
THEN getObjectDistance(Railing,Railing)<3 m
END IF
END IF
}
def Check():
for building in SELECT('building'):
for stair in building.SELECT('stair'):
st_w = stair.SELECT('width').UNIT('m')
st_w_num = height.NUMBER()
if st_w_num >= 3:
for riser_height in stair.SELECT('riser height'):
riser_h_num = riser_height.UNIT('mm').NUMBER()
if riser_h_num <= 15:
braker = True
break
for riser_width in stair.SELECT('riser width'):
riser_w_num = riser_width.UNIT('mm').NUMBER()
if riser_w_num >= 30:
braker = True
break
if braker is True:
break
else:
pass
# 3미터 이내마다 난간 설치 확인을 위하여 난간간 간격 파악 필요
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
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 7호
check(REFB_13_3_7){
KS
}
KS{
Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}
hasObject(mySpace, WarningAndCommunicationFacility) = TRUE
}
② 건축물(갓복도식 공동주택은 제외한다)의 11층(공동주택의 경우에는 16층) 이상인 층(바닥면적이 400제곱미터 미만인 층은 제외한다) 또는 지하 3층 이하인 층(바닥면적이 400제곱미터미만인 층은 제외한다)으로부터 피난층 또는 지상으로 통하는 직통계단은 제1항에도 불구하고 특별피난계단으로 설치하여야 한다. <개정 2008.10.29>
//건축법 시행령 35조 (피난계단의 설치) 2항
check(EDBA_35_2){
IF (CS1 AND CS2) THEN KS
}
CS1{
Building.usage != "MultiUnitHouse.SideCorridorTypeMultiUnitHouse"
}
CS2{
Floor myFloor{
IF (Building.usage = "MultiUnitHouse“)
THEN getFloorNumber(Floor) >= 16
ELSE
getFloorNumber(Floor) >= 11
ENDIF
OR getFloorNumber(Floor) < -3
getFloorArea(Floor) >= 400m2
}
Stair myStair {
(isAccessible(Stair, Floor.isEscape) = TRUE
OR isAccessible(Stair, Ground) = TRUE)
isObjectProperty(Stair.isDirect) = TRUE
}
hasObject(myFloor, myStair) = TRUE
}
KS{
isObjectProperty(myStair.isSpecialEscape) = TRUE
}
제37조 (지하층과 피난층 사이의 개방공간 설치) 바닥면적의 합계가 3천 제곱미터 이상인 공연장·집회장·관람장 또는 전시장을 지하층에 설치하는 경우에는 각 실에 있는 자가 지하층 각 층에서 건축물 밖으로 피난하여 옥외 계단 또는 경사로 등을 이용하여 피난층으로 대피할 수 있도록 천장이 개방된 외부 공간을 설치하여야 한다.
Check(EDBA_37){
IF (CS) THEN KS END IF
Space mySpace{
Space.Floor.area > 3000 M2;
Space.usage="PerformanceHall"
OR Space.usage="AssemblyHall"
OR Space.usage="Auditorium"
OR Space.usage="ExhibitionHall"
}
}
CS{
mySpace.Floor.number< 0
}
KS{
Stair myStair{
Stair.isOutdoor = TRUE
}
Floor myFloor{
Floor.isEscape = TRUE
}
Space mySpace{
hasObject(Space, Ceiling) != TRUE
}
(isGoThrough(mySpace, myStair, myFloor)=True
OR isGoThrough(mySpace, Ramp, myFloor)=True)
AND isExternal(mySpace)=True
}
std_area = 3000
std_area_label = '기준 바닥면적 합계'
def Check():
for building in SELECT('building'):
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
if not (bldg_use == '문화 및 집회시설' and sub_use in ['공연장', '집회장', '관람장', '전시장']):
continue
base_storey_exist = False
under_stories = []
for storey in building.SELECT('storey'):
if storey.SELECT('prop', '기준 지상층').BOOL():
base_storey_exist = True
break
under_stories.append(storey)
if base_storey_exist == False:
building.ERROR('지상층이 존재하지 않습니다.')
continue
if len(under_stories) == 0:
continue
area_sum = 0.0
ex_spaces = []
for storey in under_stories:
for space in storey.SELECT('space'):
area_sum += space.SELECT('area').UNIT('m2').NUMBER()
if space.SELECT('is external').BOOL():
ex_spaces.append(space)
if area_sum < std_area:
building.SUCCESS('지하공간 바닥면적 합: ' + str(area_sum) + ' < ' + str(std_area))
continue
if len(ex_spaces) == 0:
building.ERROR('지하에 천장이 개방된 외부 공간이 없습니다.')
continue
for space in ex_spaces:
for stair in space.SELECT('stair'):
if stair.SELECT('is direct').BOOL():
space.SUCCESS('피난층으로 대피할 수 있는 외부 공간이 존재합니다.')
return
ex_spaces[0].ERROR('피난층으로 대피할 수 없습니다.')
⑤ 제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
}
① 건축물의 피난층(직접 지상으로 통하는 출입구가 있는 층을 말한다. 이하 같다) 외의 층에서는 피난층 또는 지상으로 통하는 직통계단(경사로를 포함한다. 이하 같다)을 거실의 각 부분으로부터 계단(거실로부터 가장 가까운 거리에 있는 계단을 말한다)에 이르는 보행거리가 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
}
5. 「게임산업진흥에 관한 법률」 제2조제6호ㆍ제6호의2ㆍ제7호 및 제8호의 게임제공업ㆍ인터넷컴퓨터게임시설제공업 및 복합유통게임제공업. 다만, 게임제공업 및 인터넷컴퓨터게임시설제공업의 경우에는 영업장(내부계단으로 연결된 복층구조의 영업장은 제외한다)이 지상 1층 또는 지상과 직접 접하는 층에 설치되고 그 영업장의 주된 출입구가 건축물 외부의 지면과 직접 연결된 구조에 해당하는 경우는 제외한다.
//다중이용업소의 안전관리에 관한 특별법 시행령 2조 (다중이용업) 5호
Check(ERSASP_2_0_5){
KS1 AND IF CS THEN !KS2
}
KS1{
getObjectProperty(Building.business)= "GIPA_2_0_6"
OR getObjectProperty(Building.business)= "GIPA_2_0_6-2"
OR getObjectProperty(Building.business)= "GIPA_2_0_7"
OR getObjectProperty(Building.business)= "GIPA_2_0_8"
}
CS{
getObjectProperty(Building.business)= "GIPA_2_0_6"
OR getObjectProperty(Building.business)= "GIPA_2_0_7"
}
KS2{
Space mySpace{
Space.usage = "GIPA_2_0_6"
OR Space.usage = "GIPA_2_0_7"
}
Floor myFloor{
hasObject(Floor,mySpace)=TRUE
}
Door myDoor{
isObjectProperty(mySpace.Door.isEntrance)=TRUE
}
(getObjectProperty(myFloor.number)=1
OR isDirectlyAccessible(myFloor, Ground)=TRUE)
isConnectedToExternal(myDoor)=TRUE
}
나. 천장의 최상부를 중심으로 가지관을 서로 마주보게 설치하는 경우에는 최상부의 가지관 상호간의 거리가 가지관상의 스프링클러헤드 상호간의 거리의 2분의 1이하(최소 1m 이상이 되어야 한다)가 되게 스프링클러헤드를 설치하고, 가지관의 최상부에 설치하는 스프링클러헤드는 천장의 최상부로부터의 수직거리가 90㎝ 이하가 되도록 할 것. 톱날지붕, 둥근지붕 기타 이와 유사한 지붕의 경우에도 이에 준한다.
//연결살수설비의 화재안전기준(nfsc 503) 6조 (연결살수설비의 헤드) 3항 6호 나목
Check(NFSC503_6_3_6_2){
IF (CS1 THEN KS1) or (CS2 THEN KS2)
}
CS1{
hasObject(Ceiling, SprinklerHead.Deflector) = TRUE
getObjectWidth(SprinklerHead, c) = SH
getObjectWidth(SprinklerHead.Deflector) = SHD
SH*0.5 < 1m
}
KS1{
getObjectWidth(SprinklerHead.Deflector) = 1m
getVerticalObjectDistance(SprinklerHead, Ceiling) <= 90cm
}
CS2{
hasObject(Ceiling, SprinklerSystemHead.Deflector) = TRUE
getObjectWidth(SprinklerSystemHead, c) = SH
getObjectWidth(SprinklerSystemHead.Deflector) = SHD
SH*0.5 >= 1m
}
KS2{
getObjectWidth(SprinklerSystemHead.Deflector) = SHD
SHD <= SH*0.5
getVerticalObjectDistance(SprinklerSystemHead, Ceiling) <= 90cm
}
7. 연소할 우려가 있는 개구부에는 그 상하좌우에 2.5m 간격으로(개구부의 폭이 2.5m 이하인 경우에는 그 중앙에) 스프링클러헤드를 설치하되, 스프링클러헤드와 개구부의 내측면으로부터의 직선거리는 15㎝ 이하가 되도록 할 것. 이 경우 사람이 상시 출입하는 개구부로서 통행에 지장이 있는 때에는 개구부의 상부 또는 측면(개구부의 폭이 9m 이하인 경우에 한한다)에 설치하되, 헤드 상호간의 간격은 1.2m 이하로 설치하여야 한다.
//연결살수설비의 화재안전기준(nfsc 503) 6조 (연결살수설비의 헤드) 3항 7호
Check(NFSC503_6_3_7){
IF (CS1 THEN KS1) or (CS2 THEN KS2)
}
CS1{
Opening myOpening{
isObjectProperty(Opening.isFireSpreading) = TRUE
}
isExist(myOpening) = TRUE
getObjectWidth(myOpening, a) > 2.5m
}
KS1{
(getObjectDistance(myOpening.InsideSurface, SprinklerSystem.Head) <= 15cm
getObjectWidth(SprinklerSystem.Head, a) = 2.5m)
OR (getObjectWidth(myOpening) <= 9m
getObjectDistance(myOpening.InsideSurface, SprinklerSystem.Head) <= 15cm
getObjectWidth(SprinklerSystem.Head, a) <= 1.2m)
}
CS2{
Opening myOpening{
isObjectProperty(Opening.isFireSpreading) = TRUE
}
isExist(myOpening) = TRUE
getObjectWidth(myOpening, a) <= 2.5m
}
KS2{
hasObject(myOpening, SprinklerSystem.Head) = TRUE
}
4. 송수구로부터 연결송수관설비의 주배관에 이르는 연결배관에 개폐밸브를 설치한 때에는 그 개폐상태를 쉽게 확인 및 조작할 수 있는 옥외 또는 기계실 등의 장소에 설치할 것. 이 경우 개폐밸브에는 그 밸브의 개폐상태를 감시제어반에서 확인할 수 있도록 급수개폐밸브 작동표시 스위치를 다음 각 목의 기준에 따라 설치하여야 한다. <개정 2014.8.18>
다. 바닥으로부터 높이 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
}
1. 장애인등의 통행이 가능한 접근로
가. 유효폭 및 활동공간
(1) 휠체어사용자가 통행할 수 있도록 접근로의 유효폭은 1.2미터 이상으로 하여야 한다.
(2) 휠체어사용자가 다른 휠체어 또는 유모차 등과 교행할 수 있도록 50미터마다 1.5미터×1.5미터 이상의 교행구역을 설치할 수 있다.
(3) 경사진 접근로가 연속될 경우에는 휠체어사용자가 휴식할 수 있도록 30미터마다 1.5미터×1.5미터 이상의 수평면으로 된 참을 설치할
//장애인ㆍ노인ㆍ임산부 등의 편의증진보장에 관한 법률 시행규칙 별표1 편의시설의 구조·재질등에 관한 세부기준(제2조제1항관련)
Check(ERCDAPA_2_1_*_1_4_나_1){
IF (CS1 THEN KS1) OR (CS2 THEN KS2)
ParkingUnit myParkingUnit{
isObjectProperty(ParkingUnit.isParallelParking) = TRUE
}
CS1{
isObjectProperty(ParkingUnit.isParallelParking) = TRUE
}
KS1{
getObjectWidth(ParkingLotArea.isHandicapParking, a) >= 3.3 m
getElementLength(ParkingLotArea.isHandicapParking) >= 5 m
}
CS2{
isObjectProperty(ParkingLotArea.isParallelParking) = FALSE
}
KS2{
getObjectWidth(ParkingLotArea.isHandicapParking, a) >= 2 m
getElementLength(ParkingLotArea.isHandicapParking) >= 6 m
}
}
check(ERCDAPA_2_1_*_1_4_나_2){
getObjectGradient(ParkingSpace.Floor) <= 1/50
}
check(ERCDAPA_2_1_*_1_6_가_1){
Door myDoor1{
isObjectProperty(Door.isEntrance) = TRUE
}
Door myDoor2{
isObjectProperty(Door.isEntrance) = TRUE
getObject(Door.isEntrance) != getObject(myDoor1)
}
getObjectWidth(Door.isEntrance) >= 0.8 m
isEgressDirection(myDoor1) = isEgressDirection(myDoor2)
getObjectDistance(myDoor1, myDoor2) >= 1.2 m
}
check(ERCDAPA_2_1_*_1_6_가_2){
isObjectProperty(Door.isAutomatic) = FALSE
isObjectProperty(Door.isSillFree) = TRUE
}
check(ERCDAPA_2_1_*_1_8_가_2){
getObjectVerticalDistance(FloorSurface,Door.Bottom)
}
check(ERCDAPA_2_1_*_1_8_나){
Stair myStair{
isObjectProperty(Stair.isEscape) = TRUE
isObjectProperty(Stair.isOutdoor) = TRUE
}
getObjectWidth(myStair) >= 0.9 m
getObjectWidth(myStair.StairLanding) >= 0.9 m
Stair myStair2{
isObjectProperty(Stair.isEscape) = FALSE
isObjectProperty(Stair.isOutdoor) = FALSE
}
getObjectWidth(myStair2) >= 1.2 m
getObjectWidth(myStair2.StairLanding) >= 1.2 m
}
check(ERCDAPA_2_1_*_1_8_다_1){
hasObject(Stair, VerticalSurfaceStair) = TRUE
}
check(ERCDAPA_2_1_*_1_8_다_2){
getObjectWidth(Stair.threadWidth) >= 0.28 m
getObjectHeight(Stair.riserHeight) <= 0.18m
}
check(ERCDAPA_2_1_*_1_8_다_3){
getObjectGradient(Stair.riserGradient) >= 60
getObjectLength(Stair.nosingLength) < 3 cm
}
다. 경사로의 차로너비는 직선형인 경우에는 3.3미터 이상(2차선의 경우에는 6미터 이상)으로 하고, 곡선형인 경우에는 3.6미터이상(2차선의 경우에는 6.5미터 이상)으로 하며, 경사로의 양측벽면으로부터 30센티미터 이상의 지점에 높이 10센티미터 이상 15센티미터 미만의 연석을 설치하여야 한다. 이 경우 연석 부분은 차로의 너비에 포함되는 것으로 본다.
2. 기계식주차장치의 내부에 방향전환장치를 설치한 경우와 2층 이상으로 주차구획이 배치되어 있고 출입구가 있는 층의 모든 주차구획을 기계식주차장치 출입구로 사용할 수 있는 기계식주차장의 경우에는 제1호에도 불구하고 제6조제1항제3호 또는 제11조제5항제2호를 준용한다.
//주차장법 시행규칙 16조의2 (기계식주차장의 설치기준) 2호
Check(ERPA_16-2_0_2){
IF CS THEN KS
}
CS{
hasObject(MechanicalParkingEquipment,DirectionSwitchingEquipment)=True
OR
//2츠이상으로 주차구획이 배치되어 있고
// 출입구가 있는 층의 모든 주차구획을 기계식주차장치 출입구로 사용할 수 있는
getSpaceUsage()="MechanicalParking"
}
KS{
getResult(ERPA_6_1_3)=True
OR getResult(ERPA_11_5_2)=True
}