1
건축물의 구조기준 등에 관한 규칙 제 41조 2 항
②높이 4미터 이하이고, 연면적 20제곱미터 이하인 건축물에 대하여는 제42조 및 제45조의 규정에 한하여 이를 적용한다.
//건축물의 구조기준 등에 관한 규칙 41조 (적용범위) 2항
Check(RSSB_41_2){
getResult(RSSB_41_1) = TRUE AND getResult(RSSB_3_3) = TRUE AND IF CS THEN KS
}
CS{
getBuildingHeight()<=4 m
getGrossFloorArea() <=20 m2
}
KS{
getResult(RSSB_42)=True
getResult(RSSB_45)=True
}
Python Code 변환 예정
2
건축물의 구조기준 등에 관한 규칙 제 47조 2 항
②높이가 4미터 이하이고 연면적이 30제곱미터 이하인 건축물이나 높이가 3미터 이하인 담에 대하여는 제49조 및 제51조의 규정에 한하여 이를 적용한다.
//건축물의 구조기준 등에 관한 규칙 47조 (적용범위) 2항
Check(RSSB_47_2){
getResult(RSSB_3_3) = TRUE AND IF CS THEN KS
}
CS{
getBuildingHeight()<=4 m
getGrossFloorArea() <=30 m2
OR getObjectHeight(Fence)<= 3m
}
KS{
getResult(RSSB_51)=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
건축물의 구조기준 등에 관한 규칙 제 28조 2 항
②높이 4미터 이하이고 연면적 20제곱미터 이하인 건축물에 대하여는 제29조·제30조·제35조·제36조·제38조 및 제40조의 규정에 한하여 이를 적용한다.
//건축물의 구조기준 등에 관한 규칙 28조 (적용범위 등) 2항
Check(RSSB_28_2){
getResult(RSSB_28_1) = TRUE AND getResult(RSSB_3_3) = TRUE AND KS
}
KS{
getBuildingHeight() <= 4m
getGrossFloorArea() <= 20m2
}
Python Code 변환 예정
5
건축물의 설비기준 등에 관한 규칙 제 17조의2조 1 항
① 다음 각 호의 어느 하나에 해당하는 지역에서 연면적 1만제곱미터 이상의 건축물을 건축하려는 자는 빗물 등의 유입으로 건축물이 침수되지 아니하도록 해당 건축물의 지하층 및 1층의 출입구(주차장의 출입구를 포함한다)에 차수판(遮水板) 등 해당 건축물의 침수를 방지할 수 있는 설비(이하 "차수설비"라 한다)를 설치하여야 한다. 다만, 법 제5조제1항에 따른 허가권자가 침수의 우려가 없다고 인정하는 경우에는 그러하지 아니하다.
// 건축물의 설비기준 등에 관한 규칙 17조의2 (차수설비) 1항
Check(RFB_17-2_1){
IF CS THEN KS
}
CS{
getResult(RFB_17-2_1_1) = TRUE
OR getResult(RFB_17-2_1_2) = TRUE
getGrossFloorArea() >= 10000m2
}
KS{
Floor myFloor{
getObjectProperty(Floor.number) <0
}
hasSpace(myFloor,WaterCutoffSystem) = TRUE
}
Python Code 변환 예정
6
건축물의 에너지절약설계기준 제 5조 10호 차 목
차. "이코노마이저시스템”이라 함은 중간기 또는 동계에 발생하는 냉방부하를 실내 엔탈피 보다 낮은 도입 외기에 의하여 제거 또는 감소시키는 시스템을 말한다.
// 비상콘센트설비의 화재안전기준(nfsc 504) 4조 (전원 및 콘센트 등) 1항 2호
Check(NFSC504_4_1_2){
IF CS THEN KS
}
Floor myFloor{
getFloorNumber < 0
hasSpace(Floor, SpecificFireFightingBuilding) = TRUE
}
Floor myFloor2{
getFloorNumber >= 0
hasSpace(Floor, SpecificFireFightingBuilding) = TRUE
}
CS{
(getBuildingStoriesCount() >= 7
getGrossFloorArea(myFloor2) >= 2000m2)
OR getTotalFloorArea(myFloor) >= 3000m2
}
KS{
isInstalled(EmergencyPower, EmergencyPowerOutletSystem) = TRUE
getObjectProperty(EmergencyPowerReceivingSystem.type) = "InhousePowerGenerationSystem"
OR getObjectProperty(EmergencyPowerReceivingSystem.type) = "EmergencyPowerReceivingSystem"
}
Python Code 변환 예정
7
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 11조 5 항 3호
3. 연면적이 5천제곱미터 이상인 판매시설, 운수시설
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 11조 (건축물의 바깥쪽으로의 출구의 설치기준) 5항 3호
Check(REFB_11_5_3){
KS
}
KS {
getBuildingUsage() = “CommercialFacility”
OR getBuildingUsage() = “TransportationFacility”
getObjectProperty(Building.grossFloorArea ) >= 5000 m2
}
Python Code 변환 예정
8
건축법 제 64조 1 항
① 건축주는 6층 이상으로서 연면적이 2천제곱미터 이상인 건축물(대통령령으로 정하는 건축물은 제외한다)을 건축하려면 승강기를 설치하여야 한다. 이 경우 승강기의 규모 및 구조는 국토교통부령으로 정한다. <개정 2013.3.23>
//건축법 64조 (승강기) 1항
check(BA_64_1){
IF CS THEN KS
}
CS{
getBuildingStoriesCount() >= 6
getGrossFloorArea()>= 2000 m2
}
KS{
isExist(Elevator) = TRUE
getResult(RFB_5)=TRUE
getResult(RFB_6)=TRUE
getResult(REFB_29_1)=True
}
Python Code 변환 예정
9
건축법 시행령 제 58조 1호
1. 연면적 30제곱미터 미만인 단층 부속건축물로서 외벽 및 처마면이 내화구조 또는 불연재료로 된 것
check(EDBA_58_0_1){
getGrossFloorArea() < 30m2;
isObjectProperty(Building.isAttachedBuilding) = TRUE
getBuildingStoriesCount() = 1;
isFireResistantStructure(MainStructure) = TRUE
OR isFireResistantStructure(ExternalWall) = TRUE;
}
Python Code 변환 예정
10
건축법 시행령 제 39조 1 항 7호
7. 교육연구시설 중 학교
// 건축법 시행령 39조 (건축물 바깥쪽으로의 출구 설치) 1항 7호
Check(EDBA_39_1_7){
KS
}
KS {
Building myBuilding{
getBuildingUsage() = “Warehouse”
Building.grossFloorArea >= 5000 m2
}
isExist(myBuliding) = TRUE
}
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) + ')')
11
건축법 시행령 제 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 변환 예정
12
건축법 시행령 제 48조 1 항
① 법 제49조제2항에 따라 연면적 200제곱미터를 초과하는 건축물에 설치하는 계단 및 복도는 국토해양부령으로 정하는 기준에 적합하여야 한다.
//건축법 시행령 48조 (계단ㆍ복도 및 출입구의 설치) 1항
Check(EDBA_48_1){
IF CS THEN KS
}
CS{
getGrossFloorArea()>200 m2
}
KS{
getResult(REFB_15_1)=True
getResult(REFB_15_1_1)=True
getResult(REFB_15_1_2)=True
getResult(REFB_15_1_3)=True
getResult(REFB_15_1_4)=True
getResult(REFB_15_2)=True
getResult(REFB_15_2_1)=True
getResult(REFB_15_2_2)=True
getResult(REFB_15_2_3)=True
getResult(REFB_15_2_4)=True
getResult(REFB_15_2_5)=True
getResult(REFB_15_2_6)=True
getResult(REFB_15-2_1)=True
getResult(REFB_15-2_2)=True
getResult(REFB_15-2_2_1)=True
getResult(REFB_15-2_2_2)=True
getResult(REFB_15-2_2_3)=True
getResult(REFB_15-2_3)=True
getResult(REFB_15-2_3_1)=True
getResult(REFB_15-2_3_2)=True
}
std_floor_area = 200
std_floor_area_label = '기준 연면면적'
def Check():
for building in SELECT('building'):
if building.SELECT('area').Unit(m2).NUmber() < 200:
continue
13
건축법 시행령 제 57조 1 항
① 법 제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
}
Python Code 변환 예정
14
건축법 시행령 제 57조 3 항
③ 연면적 1천 제곱미터 이상인 목조 건축물의 구조는 국토해양부령으로 정하는 바에 따라 방화구조로 하거나 불연재료로 하여야 한다.
// 건축법 시행령 57조 (대규모 건축물의 방화벽 등) 3항
Check(EDBA_57_3){
IF CS THEN KS
}
CS{
getObjectProperty(Building.grossFloorArea ) >= 1000m2
getObjectProperty(Building.Structure.materialType) = "Timber"
}
KS{
getObjectProperty(MainStructuralPart.Material.nonCombustibility) = TRUE
OR getObjectProperty(MainStructuralPart.isFireProofStructure) = TRUE
}
Python Code 변환 예정
15
건축법 시행령 제 87조 6 항
⑥ 연면적이 500제곱미터 이상인 건축물의 대지에는 국토해양부령으로 정하는 바에 따라 「전기사업법」 제2조제2호에 따른 전기사업자가 전기를 배전(配電)하는 데 필요한 전기설비를 설치할 수 있는 공간을 확보하여야 한다. <신설 2009.7.16>
//건축법 시행령 87조 (건축설비 설치의 원칙) 6항
Check(EDBA_87_6){
IF CS THEN KS
}
CS{
getGrossFloorArea()>= 500 m2
}
KS{
getResult(RFB_20-2)=True
}
Python Code 변환 예정
16
연결송수관설비의 화재안전기준(NFSC 502) 제 6조 1호 다 목
다. 송수구가 부설된 옥내소화전을 설치한 특정소방대상물(집회장·관람장·백화점·도매시장·소매시장·판매시설·공장·창고시설 또는 지하가를 제외한다)로서 다음의 어느 하나에 해당하는 층
(1) 지하층을 제외한 층수가 4층 이하이고 연면적이 6,000㎡ 미만인 특정소방대상물의 지상층
(2) 지하층의 층수가 2 이하인 특정소방대상물의 지하층
//연결송수관설비의 화재안전기준(NFSC 502) 6조 (방수구) 1호 다목
Check(NFSC502_6_0_1_다목){
KS
}
KS{
getBuildingUsage()!="AssemblyHall"
getBuildingUsage()!="Auditorium"
getBuildingUsage()!="DepartmentStore"
getBuildingUsage()!="WholesaleMarket"
getBuildingUsage()!="CommercialFacility"
getBuildingUsage()!="Factory"
getBuildingUsage()!="Warehouse"
getBuildingUsage()!="UndergroundMarket"
FireHydrant myFireHydrant{
isExternal(FireHydrant) = FALSE
isInstalled(FireDepartmentConnection, FireHydrant)=True
}
isInstalled(myIndoorFireHydrant,SpecificFireFightingBuilding)=True
Floor myFloor{
Floor.number>0
}
Floor myFloor2{
Floor.number<0
}
(
gerObjectCount(myFloor)<=4
getGrossFloorArea()<6000 m2
Floor.number>0
)
OR
(
getObjectCount(myFloor)<=2
Floor.number<0
)
}
Python Code 변환 예정