① 주요구조부(바닥·지붕틀 및 주계단은 제외한다. 이하 이 조에서 같다)가 목구조인 건축물은 지붕높이 18미터 이하, 처마높이 15미터 이하 및 연면적 3,000제곱미터 이하로 하여야 한다. 다만, 스프링클러를 설치하는 경우에는 연면적을 6,000제곱미터까지 허용할 수 있다.
②가스보일러에 의한 난방설비를 설치하고 가스를 중앙집중공급방식으로 공급하는 경우에는 제1항의 규정에 불구하고 가스관계법령이 정하는 기준에 의하되, 오피스텔의 경우에는 난방구획마다 내화구조로 된 벽·바닥과 갑종방화문으로 된 출입문으로 구획하여야 한다. <신설 1999.5.11.>
// 건축물의 설비기준 등에 관한 규칙 13조 (개별난방설비) 2항
Check(RFB_13_2){
IF CS THEN KS
}
CS{
getBuildingUsage() = "Officetel"
}
KS{
Wall myWall{
isObjectProperty(Wall.isfireResistantStructure)
}
FloorSlab myFloorSlab{
isObjectProperty(FloorSlab.isFireResistantStructure) = TRUE
}
Door myDoor{
isObjectProperty(Door.isStrictFireproofDoor) = TRUE
}
Zone myZone{
isObjectProperty(Zone.isHeatingSection) = TRUE
}
isPartitioned(myZone, myWall) = TRUE
OR isPartitioned(myZone, myFloorSlab) = TRUE
OR isPartitioned(myZone, myDoor) = TRUE
}
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
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 3조 (내화구조) 6호 나목
Check (REFB_3_0_6_나){
IF CS THEN KS
}
CS{
getObjectProperty(Roof.Structure.materialType) = "ConcreteBlock" OR "Brick" OR "Stone"
isObjectProperty(Structure.isReinforcedSteelStructure) = TRUE
}
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 3조 (내화구조) 6호 다목
Check (REFB_3_0_6_다){
IF CS THEN KS
}
CS{
getObjectProperty(Roof.Structure.materialType) = "GlassBlock" OR "WiredSheetGlass"
isObjectProperty(Structure.isReinforcedSteelStructure) = 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
}
1. 헬리포트의 길이와 너비는 각각 22미터이상으로 할 것. 다만, 건축물의 옥상바닥의 길이와 너비가 각각 22미터이하인 경우에는 헬리포트의 길이와 너비를 각각 15미터까지 감축할 수 있다.
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙
Check(REFB){
IF CS THEN KS1 ELSE KS2
}
CS{
getObjectLength(Building.RoofTop.FloorSlab)<=22 m
getObjectWidth(Building.RoofTop.FloorSlab)<=22 m
}
KS1{
getObjectLength(Heliport)>=15 m
getObjectWidth(Heliport)>=15 m
}
KS2{
getObjectLength(Heliport)>=22 m
getObjectWidth(Heliport)>=22 m
}
①영 제52조의 규정에 의하여 건축물의 최하층에 있는 거실바닥의 높이는 지표면으로부터 45센티미터 이상으로 하여야 한다. 다만, 지표면을 콘크리트바닥으로 설치하는 등 방습을 위한 조치를 하는 경우에는 그러하지 아니하다.
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 18조 (거실등의 방습) 1항
Check(REFB_18_1){
IF !CS THEN KS}
KS{
getObjectHeight(getFloor(BottomFloor))>=45CM
}
CS {
isObjectProperty(Ground.Surface.isDampProof)=TRUE
}
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
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
}
3. 방화벽에 설치하는 출입문의 너비 및 높이는 각각 2.5미터 이하로 하고, 해당 출입문에는 제26조에 따른 갑종방화문을 설치할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 21조 (방화벽의 구조) 1항 3호
Check(REFB_21_1_3){
KS
}
KS{
Door myDoor{
isObjectProperty(Door.isEntrance)=True
isInstalled(Door, myWall)=True
}
getObjectWidth(myDoor)<=2.5 m
getObjectHeight(myDoor)<=2.5 m
isObjectProperty(myDoor.isStrictFireproofDoor)=True
}
자. 건축물의 내부에서 노대 또는 부속실로 통하는 출입구에는 제26조에 따른 갑종방화문을 설치하고, 노대 또는 부속실로부터 계단실로 통하는 출입구에는 제26조에 따른 갑종방화문 또는 을종방화문을 설치할 것. 이 경우 갑종방화문 또는 을종방화문은 언제나 닫힌 상태를 유지하거나 화재로 인한 연기, 온도, 불꽃 등을 가장 신속하게 감지하여 자동적으로 닫히는 구조로 하여야 한다.
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 9조 (피난계단 및 특별피난계단의 구조) 2항 3호 자목
check (REFB_9_2_3_9){
IF(CS1) THEN KS1 OR (CS2) TEHN KS2
}
Space mySpace1 {
isExternal(Space)=FALSE
}
Space mySpace2 = getSpace(“Balcony”) + getSpace(“AncillaryRoom”)
CS1{
isGoThrough(mySpace1,Door,mySpace2) = TRUE
}
KS1 {
isObjectProperty(Door.isStrictFireproofDoor)= TRUE
}
CS2{
isGoThrough(mySpace2,Door,Stair.Space) = TRUE
}
KS2{
isObjectProperty(Door.isFireproofDoor)= TRUE
}
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 1호
Check (REFB_13_3_1){
KS
}
KS{
Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}
mySpace.area > Roof.horizontalProjectionArea*0.1
}
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 4호
Check(REFB_13_3_4){
KS
}
KS{
isObjectProperty(Door.isEntrance)=True
getObjectProperty( myDoor.effectiveWidth) > 0.9 m
isObjectProperty(Door.isStrictFireproofDoor)=True
② 방화지구 안의 공작물로서 간판, 광고탑, 그 밖에 대통령령으로 정하는 공작물 중 건축물의 지붕 위에 설치하는 공작물이나 높이 3미터 이상의 공작물은 주요부를 불연(不燃)재료로 하여야 한다.
//건축법 51조 (방화지구 안의 건축물) 2항
Check(BA_51_2){
IF CS THEN KS
}
CS{
getResult(LPUA_37_1_4)=True
}
KS{
Construction myConstruction {
isInstalled(Construction , Rooftop)=True
OR Construction.height>=3 m
}
isObjectProperty(myConstruction.MainStructuralPart.Material.nonCombustibility)=True
}
① 법 제49조제1항에 따라 5층 이상 또는 지하 2층 이하인 층에 설치하는 직통계단은 국토해양부령으로 정하는 기준에 따라 피난계단 또는 특별피난계단으로 설치하여야 한다. 다만, 건축물의 주요구조부가 내화구조 또는 불연재료로 되어 있는 경우로서 다음 각 호의 어느 하나에 해당하는 경우에는 그러하지 아니하다. <개정 2008.10.29>
//건축법 시행령 35조(피난계단의 설치) 1항
Check(EDBA_35_1){
IF (!CS1 AND !CS2 AND CS3) THEN KS
}
CS1 {
isFireProofStructure(MainStructuralPart) = TRUE
OR isObjectProperty(MainStructuralPart.Material.nonCombustibility) = TRUE
}
CS2 {
getResult(EDBA_35_1_1) = TRUE
OR getResult(EDBA_35_1_2) = TRUE
}
CS3{
Floor myFloor {
Floor.number > 5
OR Floor.number <= -2
}
Stair myStair {
isObjectProperty(Stair.isDirect) = TRUE
}
hasElement(myFloor, myStair) = TRUE
}
KS {
isObjectProperty(myStair.isEscape) = TRUE
OR isObjectProperty(myStair.isSpecialEscape) = TRUE
}
① 법 제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
}
① 법 제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
}
① 법 제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
}
③폐쇄형헤드를 사용하는 연결살수설비의 주배관은 옥내소화전설비의 주배관(옥내소화전설비가 설치된 경우에 한한다) 및 수도배관(연결살수설비가 설치된 건축물 안에 설치된 수도배관 중 구경이 가장 큰 배관을 말한다) 또는 옥상에 설치된 수조(다른 설비의 수조를 포함한다)에 접속하여야 한다. 이 경우 연결살수설비의 주배관과 옥내소화전설비의 주배관·수도배관·옥상에 설치된 수조의 접속부분에는 체크밸브를 설치하되, 점검하기 쉽게 하여야 한다.
// 연결살수설비의 화재안전기준(nfsc 503) 5조 (배관 등) 3항
Check(NFSC503_5_3){
IF CS THEN KS
}
Head myHead{
isObjectProperty(Head.openAndCloseType) = "EnclosedType"
}
Pipe myPipe1{
isObjectProperty(Pipe.isRiser) = TRUE
isObjectProperty(myPipe.systemType) = "HookingUpSprinklerSystem"
}
CS{
isInstalled(myHead, myPipe1) = TRUE
}
KS{
Pipe myPipe2{
isObjectProperty(Pipe.isRiser) = TRUE
isObjectProperty(myPipe.systemType) = "IndoorFireHydrantSystem"
}
Tank myTank{
isInstalled(Tank, Rooftop) = TRUE
}
Pipe myPipe3{
Pipe.isForWater = TRUE
연결살수설비가 설치된 건축물 안에 설치된 수도배관 중 구경이 가장 큰 배관
}
Valve myValve{
isObjectProperty(Valve.isCheckValve) = TRUE
}
(isConnectedTo(myPipe1, myPipe2) = TRUE
isInstalled(myValve, myPipe1) = TRUE
isInstalled(myValve, myPipe2) = TRUE)
OR (isConnectedTo(myPipe1, myPipe3) = TRUE
isInstalled(myValve, myPipe1) = TRUE
isInstalled(myValve, myPipe3) = TRUE)
OR (isConnectedTo(myPipe1, myTank) = TRUE
isInstalled(myValve, myPipe1) = TRUE
isInstalled(myValve, myTank) = TRUE)
}
// 연소방지설비의 화재안전기준(nfsc 506) 8조 (방화벽의 설치기준) 3호
Check(NFSC506_8_0_3){
KS
}
KS{
Wall myWall{
isObjectProperty(Wall.isFireProofWall)=True
}
IF isInstalled(Wire, myWall)=True
THEN isObjectProperty(Wire.Finish.Material.isFireStop)= TRUE
END IF
IF isInstalled(Cable, myWall)=True
THEN isObjectProperty(Cable.Finish.Material.isFireStop)= TRUE
END IF
}