2. 최대휨모멘트를 받는 부분에 있어서의 인장철근의 간격은 단변방향은 200밀리미터 이하로 하고 장변방향은 300밀리미터 이하로 하되, 슬래브의 두께의 3배 이하로 하여야 한다.
//건축물의 구조기준 등에 관한 규칙 53조 (콘크리트슬래브의 구조) 2호
Check(RSSB_53_0_2){
KS
}
KS{
getObjectDistance(TensionReinforcement, "최대휨모멘트를 받는 부분의 단변방향의 간격") <=200 mm
getObjectDistance(TensionReinforcement, "최대휨모멘트를 받는 부분의 장변방향의 간격") <=300 mm
TS=getObjectThickness(Slab)
getObjectDistance(TensionReinforcement, "최대휨모멘트를 받는 부분의간격") <= TS/3
}
//스프링클러설비의 화재안전기준 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
}
제21조(건축물의 에너지 소요량의 평가) 「건축법 시행령」제3조의4에 따른 업무시설 기타 에너지소비특성 및 이용 상황 등이 이와 유사한 건축물로서 연면적의 합계가 3천 제곱미터 이상인 건축물은 1차 에너지 소요량 등을 평가하여 별지 제1호 서식에 따른 건축물 에너지 소요량 평가서를 제출하여야 한다. 다만, 「건축물 에너지효율등급 인증에 관한 규칙」 제11조에 따라 건축물 에너지효율등급 예비인증을 취득한 경우에는 동 규칙 별지 제6호 서식의 건축물 에너지
제22조(건축물의 에너지 소요량의 평가방법) 건축물 에너지소요량은 ISO 13790 등 국제규격에 따라 난방, 냉방, 급탕, 조명, 환기 등에 대해 종합적으로 평가하도록 제작된 프로그램에 따라 산출된 연간 단위면적당 1차 에너지소요량 등으로 평가하며, 별표10의 평가기준과 같이 한다.
4. 금속제 굴뚝은 목재 기타 가연재료로부터 15센티미터 이상 떨어져서 설치할 것. 다만, 두께 10센티미터 이상인 금속외의 불연재료로 덮은 경우에는 그러하지 아니하다.
check(REFB_20_0_4){
IF !CS THEN KS
}
CS{
(isObjectProperty(Chimney.Material.nonCombustibility)= TRUE
AND !(getObjectProperty(Chimney.Material)="Metal"))
And getElementWidth(NoncombustibleMaterials)>=10
}
KS{
getObjectDistance(Chimney, combustibleMaterials)>= 15CM
AND getObjectProperty(Chimney.Material)="Metal"))
}
①영 제39조제1항의 규정에 의하여 건축물의 바깥쪽으로 나가는 출구를 설치하는 경우 피난층의 계단으로부터 건축물의 바깥쪽으로의 출구에 이르는 보행거리(가장 가까운 출구와의 보행거리를 말한다. 이하 같다)는 영 제34조제1항의 규정에 의한 거리이하로 하여야 하며, 거실(피난에 지장이 없는 출입구가 있는 것을 제외한다)의 각 부분으로부터 건축물의 바깥쪽으로의 출구에 이르는 보행거리는 영 제34조제1항의 규정에 의한 거리의 2배 이하로 하여야 한다.
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 11조 (건축물의 바깥쪽으로의 출구의 설치기준) 1항
Check(REFB_11_1){
IF CS THEN KS1 AND KS2
}
CS {
Door myDoor{
isObjectProperty(Door.isEntrance)=TRUE
}
isExist(myDoor)
}
KS1 {
Floor myFloor{
isObjectProperty(Floor.isEscape)=TRUE
}
getObjectDistance(myFloor.Stair, myDoor,a) <= EDBA_34_1.distance
}
KS2 {
getObjectDistance(Room, myDoor) <= (EDBA_34_1.distance)*2
}
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미터 이내마다 난간 설치 확인을 위하여 난간간 간격 파악 필요
②영 제52조에 따라 다음 각 호의 어느 하나에 해당하는 욕실 또는 조리장의 바닥과 그 바닥으로부터 높이 1미터까지의 안벽의 마감은 이를 내수재료로 하여야 한다. <개정 2010.4.7>
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 18조 (거실등의 방습) 2항
Check(REFB_18_2){
IF CS THEN KS
}
CS{
getResult(REFB_18_2_1)=TRUE
OR getResult(REFB_18_2_2)=TRUE
}
KS{
Finish myFinish{
getObjectDistance(Finish,floor)<=1
isObjectPropert(InteriorFinish.Material.waterResistance)=TRUE
}
2. 방화벽의 양쪽 끝과 윗쪽 끝을 건축물의 외벽면 및 지붕면으로부터 0.5미터 이상 튀어 나오게 할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 21조 (방화벽의 구조) 1항 2호
Check(REFB_21_1_2){
KS
}
KS{
Object myObject{
//방화벽의 양쪽 끝과 윗쪽 끝
}
Wall myWall{
isObjectProperty(Wall.isExternal)=True
}
getObjectDistance(myObject, myWall)>=0.5 m
getObjectDistance(myObject, Roof)>=0.5 m
}
②영 제61조제1항제4호나목에서 "국토교통부령으로 정하는 출구"란 건축물의 내부의 각 부분으로부터 출구(가장 가까운 거리에 있는 출구를 말한다)에 이르는 보행거리가 30미터 이하가 되도록 설치된 유효너비 1.5미터 이상의 출구를 말한다. <개정 2008.3.14, 2010.12.30, 2013.3.23>
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 24조의2 (소규모 공장용도 건축물의 마감재료) 2항
check(REFB_24-2_2){
KS
}
KS{
Door myDoor{
isObjectProperty(Door.isEntrance) = TRUE
}
getObjectDistance(Building.IndoorElement, Door) <= 30
isObjectProperty(Door.effectiveWidth) >= 1.5m
}
① 건축물의 피난층(직접 지상으로 통하는 출입구가 있는 층을 말한다. 이하 같다) 외의 층에서는 피난층 또는 지상으로 통하는 직통계단(경사로를 포함한다. 이하 같다)을 거실의 각 부분으로부터 계단(거실로부터 가장 가까운 거리에 있는 계단을 말한다)에 이르는 보행거리가 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))
가. 각층마다 설치하되, 특정소방대상물의 각 부분으로부터 1개의 소화기까지의 보행거리가 소형소화기의 경우에는 20m 이내, 대형소화기의 경우에는 30m 이내가 되도록 배치할 것. 다만, 가연성물질이 없는 작업장의 경우에는 작업장의 실정에 맞게 보행거리를 완화하여 배치할 수 있으며, 지하구의 경우에는 화재발생의 우려가 있거나 사람의 접근이 쉬운 장소에 한하여 설치할 수 있다<개정 2012.6.11>
//소화기구 및 자동 소화장치의 화재안전기준(nfsc 101) 4조 (설치기준) 1항 4호 가목
Check(NFSC101_4_1_4){
KS
}
KS{
isInstalled(FireExtinguisher, Floor)=True
IF getObjectProperty(FireExtinguisher.sizeType)="SmallSize"
THEN getObjectDistance(SpecificFireFightingBuilding.Wall, FireExtinguisher.One)<=20 m
getObjectDistance(SpecificFireFightingBuilding.Column, FireExtinguisher.One)<=20 m
ELSE IF getObjectProperty(FireExtinguisher.sizeType)="LargeSize"
THEN getObjectDistance(SpecificFireFightingBuilding.Wall, FireExtinguisher.One)<=30 m
getObjectDistance(SpecificFireFightingBuilding.Column, FireExtinguisher.One)<=30 m
END IF
}
2. 천장 또는 반자의 각 부분으로부터 하나의 살수헤드까지의 수평거리가 연결살수설비전용헤드의 경우은 3.7m 이하, 스프링클러헤드의 경우는 2.3m 이하로 할 것. 다만, 살수헤드의 부착면과 바닥과의 높이가 2.1m 이하인 부분은 살수헤드의 살수분포에 따른 거리로 할 수 있다.
// 연결살수설비의 화재안전기준(nfsc 503) 6조 (연결살수설비의 헤드) 2항 2호
Check(NFSC503_6_2_2){
IF (CS1 THEN KS1) OR (CS2 THEN KS2)
}
CS1{
Head myHead{
isObjectProperty(HookingUpSprinklerSystem.Head.isShared) = FALSE
}
isExist(myHead) = TRUE
}
KS1{
getObjectDistance(Ceiling, HookingUpSprinklerSystem.Head) <= 3.7m
OR getObjectDistance(CeilingCovering, HookingUpSprinklerSystem.Head) <= 3.7m
}
CS2{
isExist(SprinklerHead) = TRUE
}
KS2{
getObjectDistance(Ceiling, SprinklerSystem) <= 2.3m
OR getObjectDistance(CeilingCovering, SprinklerSystem) <= 2.3m
}
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
}
2. 방수구는 아파트 또는 바닥면적이 1,000㎡ 미만인 층에 있어서는 계단(계단의 부속실을 포함하며 계단이 2 이상 있는 경우에는 그 중 1개의 계단을 말한다)으로부터 5m 이내에, 바닥면적 1,000㎡ 이상인 층(아파트를 제외한다)에 있어서는 각 계단(계단의 부속실을 포함하며 계단이 3 이상 있는 층의 경우에는 그 중 2개의 계단을 말한다)으로부터 5m 이내에 설치하되, 그 방수구로부터 그 층의 각 부분까지의 거리가 다음 각목의 기준을 초과하는 경우
//연결송수관설비의 화재안전기준(NFSC 502) 6조 (방수구) 2호
Check(NFSC502_6_0_2){
KS
}
KS{
Space mySpce{
getSpaceUsage(Space)="Stair.AncillaryRoom"
OR
(
IF getObjectCoutn(Stair)>=2
THEN getSpace(Stair.One)
ELSE
getSpaceUsage(Space)="Stair"
END IF
)
}
Space mySpce2{
getSpaceUsage(Space)="Stair.AncillaryRoom"
OR
(
IF getObjectCoutn(Stair)>=3
THEN getSpace(Stair.Two)
ELSE
getSpaceUsage(Space)="Stair"
END IF
)
}
IF getBuildingUsage()="ApartmentHouse"
OR getFloorArea()<1000 m2
THEN getObjectDistance(FireDepartmentConnection, mySpace)<5 m
ELSE IF getFloorArea()>1000 m2
THEN getObjectDistance(FireDepartmentConnection, mySpace)<5 m
getResult(NFSC502_6_0_2_가)=True
getResult(NFSC502_6_0_2_나)=True
END IF
}
1. 계단에 설치하는 것을 제외하고는 각층마다 복도 및 통로의 각 부분으로부터 하나의 유도표지까지의 보행거리가 15m 이하가 되는 곳과 구부러진 모퉁이의 벽에 설치할 것
//유도등 및 유도표지의 화재안전기준(nfsc 303) 8조 (유도표지 설치기준) 1항 1호
Check(NFSC303_8_1_1){
IF ! CS THEN KS
}
CS{
isInstalled(LeadingSign,Stair)=True
}
KS{
getObjectDistance(Floor.One.Corridor.Wall, LeadingSign)<=15 m
getObjectDistance(Floor.One.Corridor.Column, LeadingSign)<=15 m
getObjectDistance(Floor.One.Passage.Wall, LeadingSign)<=15 m
getObjectDistance(Floor.One.Passage.Column, LeadingSign)<=15 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
}