개방형BIM 기반의 건축설계 적법성 평가 자동화 기술 및 응용기술 개발
Development of OpenBIM based Architectural Design Code Checking and Evaluation Technology
  Welcome to BIM - 2nd Project Website - Yonsei University
PAGE MENU  
전체법규 - 법규데이터베이스
- 대한민국 전체 법규 목록
- 설계품질검토 대상 관련법규
- 관련법규 변동 현황
대상법규 - 문장 논리규칙체계화
- 조항단위 논리규칙체계
- 문장단위 논리규칙체계
주어부 - 객체.속성 데이터베이스
- 법규로부터의 객체.속성 분류
- 명칭DB: 객체 | 객체및속성
서술부 - 함수 데이터베이스
- 논리규칙화 함수 분류
- 논리규칙화 함수 DB
관계부 - 문장 내.외 관계논리
- 문장 내.외 관계유형분류
- 문장 내.외관계 논리체계화
문장단위 | 체크리스트 단위
KBimCode 데이터베이스
- KBimCode Lang. Definition
- KBimCode Editor:
전체 개발항목 단위
우선순위 개발항목 단위
- KBimCode DB 2단계:
문장단위 | 조항단위 |
분야/용도/단계 체크리스트 단위
- KBimLogic Applications
KBimAssess Code 데이터베이스
- Executable KBimAssess Code
- KBimCode-Assess 연동모듈
 
(2025-06-28 기준) 설계품질검토용 건축법 및 관련법규 - KBIMCode (문장단위)
  ◁prev 1   2   3   4   5   next▷  
3 / 5 page Total 2500 / 4000 records    신규입력
Select
ALL
None
#
ID
Law
Jo
JO Name
HANG
HO
MOK
Text
Search!
1
26538 건축법 제 51조 2 항

② 방화지구 안의 공작물로서 간판, 광고탑, 그 밖에 대통령령으로 정하는 공작물 중 건축물의 지붕 위에 설치하는 공작물이나 높이 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

} 




Python Code 변환 예정



Modify
2
26539 건축법 제 51조 3 항

③ 방화지구 안의 지붕·방화문 및 인접 대지 경계선에 접하는 외벽은 국토교통부령으로 정하는 구조 및 재료로 하여야 한다. <개정 2013.3.23>





//건축법 51조 (방화지구 안의 건축물) 3항

Check(BA_51_3){
    KS
}

KS{
   getResult(REFB_23_1)=True
   getResult(REFB_23_2)=True
} 




Python Code 변환 예정



Modify
3
26543 건축법 제 53조

제53조(지하층) 건축물에 설치하는 지하층의 구조 및 설비는 국토교통부령으로 정하는 기준에 맞게 하여야 한다. <개정 2013.3.23>





Check(BA_53){

IF (CS) THEN KS END IF

}



CS{

   Space.Floor.number<0 ;

}



KS{

   getResult(REFB_25_1)=True

} 




Python Code 변환 예정



Modify
4
26546 건축법 제 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 변환 예정



Modify
5
26547 건축법 제 64조 2 항

② 높이 31미터를 초과하는 건축물에는 대통령령으로 정하는 바에 따라 제1항에 따른 승강기뿐만 아니라 비상용승강기를 추가로 설치하여야 한다. 다만, 국토교통부령으로 정하는 건축물의 경우에는 그러하지 아니하다. <개정 2013.3.23>





//건축법 64조 (승강기) 2항

check(BA_64_2){

  IF (!CS1 AND CS2) THEN KS

}



CS1{

    getResult(RFB_9)=TRUE

} 



CS2{

    getBuildingHeight()>31 m

}

KS{


   getResult(BA_64_1) = TRUE 

   isObjectProperty(Elevator.isEmergency)= TRUE

   getResult(EDBA_90_1)=TRUE

   getResult(RFB_10)=TRUE

} 




Python Code 변환 예정



Modify
6
27010 건축법 제 51조 1 항

① 「국토의 계획 및 이용에 관한 법률」 제37조제1항제4호에 따른 방화지구(이하 "방화지구"라 한다) 안에서는 건축물의 주요구조부와 외벽을 내화구조로 하여야 한다. 다만, 대통령령으로 정하는 경우에는 그러하지 아니하다. <개정 2014.1.14>





//건축법 51조 (방화지구 안의 건축물) 1항 

Check(BA_51_1){
   IF (!CS1 AND CS2) THEN KS
}

CS1{
    getResult(EDBA_58)=True
}

CS2{
    getResult(LPUA_37_1_4)=True
}

KS{

   Wall myWall{
     isObjectProperty(Wall.isExternal)=True
   }

        isFireResistantStructure(MainStructure) = TRUE
        isFireResistantStructure(myWall) = TRUE
}


 




Python Code 변환 예정



Modify
7
27881 건축법 제 49조 1 항

① 대통령령으로 정하는 용도 및 규모의 건축물과 그 대지에는 국토교통부령으로 정하는 바에 따라 복도, 계단, 출입구, 그 밖의 피난시설과 저수조(貯水槽), 대지 안의 피난과 소화에 필요한 통로를 설치하여야 한다. <개정 2013.3.23, 2018.4.17>





//건축법 49조 (건축물의 피난시설 및 용도제한 등) 1항
Check(BA_49_1){
   IF CS THEN KS 
}

CS{
  getResult(EDBA_34_2)= TRUE
  OR getResult(EDBA_35_1) = TRUE
  OR getResuLt(EDBA_35_2) = TRUE
  OR getResuLt(EDBA_35_3) = TRUE
  OR getResuLt(EDBA_35_5) = TRUE
  OR getResult (EDBA_38) = TRUE
  OR getResuLt(EDBA_39_1) = TRUE
  OR getResuLt(EDBA_39_2) = TRUE
}

KS{

Door myDoor{
isObjectProperty(Door.isEntrance)=TRUE
}

   isExist(Corridor) = TRUE
   isExist(Stair) = TRUE
   isExist(myDoor) = TRUE
   isExist(EvacuationFacility) = TRUE
   isExist(FireHydrant) = TRUE
   isExist(Tank) = TRUE
   isExist(ExtinguishingSystem)= TRUE
   isExist(Passage)=True

   getResult(REFB_11_1)= TRUE
   getResult(REFB_11_2)= TRUE
   getResult(REFB_11_3)= TRUE
   getResult(REFB_11_4)= TRUE
   getResult(REFB_11_5)= TRUE
} 




Python Code 변환 예정



Modify
8
27883 건축법 제 49조 3 항

③ 대통령령으로 정하는 용도 및 규모의 건축물에 대하여 가구ㆍ세대 등 간 소음 방지를 위하여 국토교통부령으로 정하는 바에 따라 경계벽 및 바닥을 설치하여야 한다. <신설 2014.5.28>





//건축법 49조 (건축물의 피난시설 및 용도제한 등) 3항 

Check(BA_49_3){
   KS
}

KS{
   getResult(EDBA_53_1)=True
   getResult(EDBA_53_2)=True
}

 




Python Code 변환 예정



Modify
9
27956 건축법 제 49조 2 항

② 대통령령으로 정하는 용도 및 규모의 건축물의 안전·위생 및 방화(防火) 등을 위하여 필요한 용도 및 구조의 제한, 방화구획(防火區劃), 화장실의 구조, 계단·출입구, 거실의 반자 높이, 거실의 채광·환기, 배연설비와 바닥의 방습 등에 관하여 필요한 사항은 국토교통부령으로 정한다. <개정 2013.3.23, 2019.4.23>





//건축법 49조 (건축물의 피난시설 및 용도제한 등) 2항
Check(BA_49_2){
     IF CS THEN KS
}

CS{
    getResult(EDBA_34_1)= TRUE
    OR getResult(EDBA_34_3)= TRUE
    OR getResult(EDBA_34_4)= TRUE
    OR getResult(EDBA_46_1)= TRUE
    OR getResult(EDBA_46_2)= TRUE
    OR getResult(EDBA_46_3)= TRUE
    OR getResult(EDBA_46_4)= TRUE
    OR getResult(EDBA_46_5)= TRUE
    OR getResult(EDBA_47_1)= TRUE 
    OR getResult(EDBA_47_2)= TRUE
    OR getResult(EDBA_48_1)= TRUE 
    OR getResult(EDBA_48_2)= TRUE
    OR getResult(EDBA_50)= TRUE 
    OR getResult(EDBA_51_1)= TRUE 
    OR getResult(EDBA_51_2)= TRUE
    OR getResult(EDBA_51_3)= TRUE  
    OR getResult(EDBA_52)= TRUE
}

KS{
   getResult(REFB_3)= TRUE 
   AND getResult(REFB_4)= TRUE
   AND getResult(REFB_8)= TRUE
   AND getResult(REFB_9)= TRUE 
   AND getResult(REFB_10)= TRUE
   AND getResult(REFB_11)= TRUE
   AND getResult(REFB_14)= TRUE
   AND getResult(REFB_15)= TRUE 
   AND getResult(REFB_16)= TRUE
   AND getResult(REFB_17)= TRUE
   AND getResult(REFB_18)= TRUE
} 




Python Code 변환 예정



Modify
10
28546 건축법 제 52조 1 항

①대통령령으로 정하는 용도 및 규모의 건축물의 내부 마감재료는 방화에 지장이 없는 재료로 하되, 「다중이용시설 등의 실내공기질관리법」 제5조 및 제6조에 따른 실내공기질 유지기준 및 권고기준을 고려하고 관계 중앙행정기관의 장과 협의하여 국토해양부령으로 정하는 기준에 따른 것이어야 한다. <개정 2009.12.29>





//건축법 52조 (건축물의 마감재료) 1항
Check(BA_52_1){
   IF CS THEN KS 
}

Building myBuilding{
getResult(EDBA_61_1)=TRUE
}
CS{
isExist(myBuilding)=TRUE
}
KS{
getResult(REFB_24_1)=TRUE
getResult(REFB_24_2)=TRUE
getResult(REFB_24_3)=TRUE
getResult(REFB_24_4)=TRUE
} 




Python Code 변환 예정



Modify
11
28547 건축법 제 52조 2 항

② 대통령령으로 정하는 건축물의 외벽에 사용하는 마감재료는 방화에 지장이 없는 재료로 하여야 한다. 이 경우 마감재료의 기준은 국토해양부령으로 정한다. <신설 2009.12.29>





//건축법 52조 (건축물의 마감재료) 2항

Check(BA_52_2){
IF CS THEN KS
}

CS{
getResult(EDBA_61_2)=TRUE
}
KS{
getResult(REFB_24_5)=TRUE

}


 




Python Code 변환 예정



Modify
12
19720 건축법 시행령 제 53조 1 항 4호

4. 노유자시설 중 「노인복지법」 제32조제1항제3호에 따른 노인복지주택(이하 "노인복지주택"이라 한다)의 각 세대 간 경계벽





// 건축법 시행령 53조 (경계벽 등의 설치) 1항 4호





check(EDBA_53_1_4){

	KS

}


KS{

Building  myBuilding{

Zone.Building.usage = “FacilitiesForTheAgedAndChildren.WelfareFacilityForTheAged ”

getResult(WOPA_32_1_3)=TRUE

}



Wall myWall{

isObjectProperty(Wall.isPartitionWall)=TRUE
hasObject(myBuilding, Wall) =TRUE
}



isObjectProperty(myWall.isSharedByHouseholds) = TRUE



} 




Python Code 변환 예정



Modify
13
29923 건축법 시행령 제 61조 1 항 4호

4. 공장의 용도로 쓰는 건축물. 다만, 건축물이 1층 이하이고, 연면적 1천 제곱미터 미만으로서 다음 각 목의 요건을 모두 갖춘 경우는 제외한다.





Check(EDBA_61_1_4){
IF !CS THEN KS}


CS{
getResult(EDBA_61_1_4_가)=PASS
OR getResult(EDBA_61_1_4_나)=PASS 
OR getResult(EDBA_61_1_4_다)=PASS
}


KS{
getBuildingUsage="Factory"} 




Python Code 변환 예정



Modify
14
30376 건축법 시행령 제 40조 3 항 1호

1. 건축물의 지붕을 평지붕으로 하는 경우: 헬리포트를 설치하거나 헬리콥터를 통하여 인명 등을 구조할 수 있는 공간





//건축법 시행령 40조 (옥상광장 등의 설치) 3항 1호

Check(EDBA_40_3_1){

  IF (CS) THEN KS

}



CS{

	getObjectProperty(Roof.shapeType) = “FlatRoof”

}



KS{

	isExist(Heliport) = True

        getResult(REFB_13_1)=True

        getResult(REFB_13_2)=True

} 




Python Code 변환 예정



Modify
15
30377 건축법 시행령 제 40조 3 항 2호

2. 건축물의 지붕을 경사지붕으로 하는 경우: 경사지붕 아래에 설치하는 대피공간





//건축법 시행령 40조 (옥상광장 등의 설치) 3항 2호

Check(EDBA_40_3_2){

  IF (CS) THEN KS

}



CS{

	getObjectProperty(Roof.shapeType) = “PitchedRoof ”

}



KS{
Space mySpace{
Space.isEscape = TRUE
}
	isExist(mySpace) = True

	getObjectProperty(mySpace.Roof.shapeType) = “PitchedRoof”



        getResult(REFB_13_3)=True

        

} 




Python Code 변환 예정



Modify
16
30403 건축법 시행령 제 61조 2 항 1호

1. 상업지역(근린상업지역은 제외한다)의 건축물로서 다음 각 목의 어느 하나에 해당하는 것





// 건축법 시행령 61조 (건축물의 마감재료) 2항 1호


Check(EDBA_61_2_1){
       KS
}




KS{
    getObjectProperty(Building.SpecialPurposeArea.type) = "CommercialArea"
    getResult(EDBA_61_2_1_가)=TRUE
  

} 




Python Code 변환 예정



Modify
17
31558 건축법 시행령 제 34조 5 항

⑤ 제3항 및 제4항에 따른 피난안전구역의 규모와 설치기준은 국토교통부령으로 정한다. <신설 2009.7.16, 2011.12.30, 2013.3.23>





// 건축법 시행령 34조 (직통계단의 설치) 5항
check(EDBA_34_5){
		getResult(REFB_8_1) = TRUE
		getResult(REFB_8-2_1) = TRUE
		getResult(REFB_8-2_2) = TRUE
		getResult(REFB_8-2_3) = TRUE
}
 




Python Code 변환 예정



Modify
18
31587 건축법 시행령 제 40조 4 항

④ 제3항에 따른 헬리포트를 설치하거나 헬리콥터를 통하여 인명 등을 구조할 수 있는 공간 및 경사지붕 아래에 설치하는 대피공간의 설치기준은 국토교통부령으로 정한다. <신설 2011.12.30, 2013.3.23>





//건축법 시행령 40조 (옥상광장 등의 설치) 4항
Check(EDBA_40_4){
  IF (CS1) THEN KS1 ELSE IF (CS2) THEN KS2
}
CS1{
  getResult(EDBA_40_3_1)=True
 
}
KS1{
   getResult(REFB_13_1)=True
   getResult(REFB_13_2)=True
  
}
CS2{
   getResult(EDBA_40_3_2)=True
}

KS2{
   getResult(REFB_13_3)=True
} 




Python Code 변환 예정



Modify
19
31607 건축법 시행령 제 46조 5 항 3호

3. 발코니의 바닥에 국토교통부령으로 정하는 하향식 피난구를 설치한 경우





//건축법 시행령 46조 (방화구획의 설치) 5항 3호
Check(EDBA_46_5_3){
CS}


CS{

AND getResult(REFB_14_3)=TRUE
} 




Python Code 변환 예정



Modify
20
31646 건축법 시행령 제 61조 1 항 4호 가 목

가. 국토교통부령으로 정하는 화재위험이 적은 공장용도로 쓸 것





Check(EDBA_61_1_4_1){
KS}


KS{
getResult(REFB_24-2_1)= TRUE
} 




Python Code 변환 예정



Modify
21
31647 건축법 시행령 제 61조 1 항 4호 나 목

나. 화재 시 대피가 가능한 국토교통부령으로 정하는 출구를 갖출 것





Check(EDBA_61_1_4_2){
KS}


KS{
getResult(REFB_24-2_2)= TRUE 
} 




Python Code 변환 예정



Modify
22
31648 건축법 시행령 제 61조 1 항 4호 다 목

다. 국토교통부령으로 정하는 성능을 갖춘 복합자재[불연성인 재료와 불연성이 아닌 재료가 복합된 자재로서 양면 철판과 심재(心材)로 구성된 것을 말한다]를 내부 마감재료로 쓸 것





Check(EDBA_61_1_4_3){
KS}


KS{
getResult(REFB_24-2_3)=TRUE 
} 




Python Code 변환 예정



Modify
23
33160 건축법 시행령 제 41조 1 항 1호

1. 통로의 너비는 다음 각 목의 구분에 따른 기준에 따라 확보할 것





Check(EDBA_41_1_1){

getresult(EDBA_41_1_1_가) =True 
getresult(EDBA_41_1_1_나) =True 
getresult(EDBA_41_1_1_다) =True 
} 








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)) 





Modify
24
33216 건축법 시행령 제 53조 1 항

① 법 제49조제3항에 따라 다음 각 호의 어느 하나에 해당하는 건축물의 경계벽은 국토교통부령으로 정하는 기준에 따라 설치하여야 한다. <개정 2010.8.17, 2013.3.23, 2014.3.24, 2014.11.28, 2015.9.22>





// 건축법 시행령 53조 (경계벽 등의 설치) 1항



check(EDBA_53_1){

	IF CS THEN KS

}



CS{

	getResult(EDBA_53_1_1) = TRUE

	OR getResult(EDBA_53_1_2) = TRUE

	OR getResult(EDBA_53_1_3) = TRUE

	OR getResult(EDBA_53_1_4) = TRUE

}



KS{

	getResult(REFB_19_1)=True	

        getResult(REFB_19_2)=True

} 




Python Code 변환 예정



Modify
25
33241 건축법 시행령 제 61조 2 항

② 법 제52조제2항에서 "대통령령으로 정하는 건축물"이란 다음 각 호의 어느 하나에 해당하는 것을 말한다. <신설 2010.12.13, 2011.12.30, 2013.3.23, 2015.9.22>





//건축법 시행령 61조 (건축물의 마감재료) 2항



Check(EDBA_61_2){
     KS
}

KS{
   getResult(EDBA_61_2_1)=TRUE
   OR getResult(EDBA_61_2_2)=TRUE
} 




Python Code 변환 예정



Modify
26
33243 건축법 시행령 제 61조 2 항 1호 가 목

가. 제1종 근린생활시설, 제2종 근린생활시설, 문화 및 집회시설, 종교시설, 판매시설, 의료시설, 교육연구시설, 노유자시설, 운동시설 및 위락시설의 용도로 쓰는 건축물로서 그 용도로 쓰는 바닥면적의 합계가 2천제곱미터 이상인 건축물





//건축법 시행령 61조 (건축물의 마감재료) 2항 1호 가목

Check(EDBA_61_2_1_가){
            KS 
}



KS{
   Building myBuilding{
    getResult(SASP_2_1_1)=True
   }

  FloorSlab myFloorSlab{

     //   getFloorUsage()=myBuilding.usage
  }
  
   getObjectArea(myFloorSlab)>2000 m2

   
} 




Python Code 변환 예정



Modify
27
34203 건축법 시행령 제 53조 2 항

② 법 제49조제3항에 따라 다음 각 호의 어느 하나에 해당하는 건축물의 층간바닥(화장실의 바닥은 제외한다)은 국토교통부령으로 정하는 기준에 따라 설치하여야 한다. <신설 2014.11.28, 2016.8.11>





//건축법 시행령 53조 (경계벽 등의 설치) 2항 

Check(EDBA_53_2){
    IF CS THEN KS
}

CS{
   getResult(EDBA_53_2_1)=True
   OR getResult(EDBA_53_2_2)=True
   OR getResult(EDBA_53_2_3)=True
   OR getResult(EDBA_53_2_4)=True
   OR getResult(EDBA_53_2_5)=True
 }

KS{
    getResult(REFB_19_3)=True
} 




Python Code 변환 예정



Modify
28
34205 건축법 시행령 제 53조 2 항 2호

2. 공동주택(「주택법」 제15조에 따른 주택건설사업계획승인 대상은 제외한다)





//건축법 시행령 53조 (경계벽 등의 설치) 2항 2호

Check(EDBA_53_2_2){
   KS
}

KS{
   getBuildingUsage()="MultiUnitHouse"
   getResult(Unimplemented_HA_16)=False
}  




Python Code 변환 예정



Modify
29
34605 건축법 시행령 제 41조 1 항

①건축물의 대지 안에는 그 건축물 바깥쪽으로 통하는 주된 출구와 지상으로 통하는 피난계단 및 특별피난계단으로부터 도로 또는 공지(공원, 광장, 그 밖에 이와 비슷한 것으로서 피난 및 소화를 위하여 해당 대지의 출입에 지장이 없는 것을 말한다. 이하 이 조에서 같다)로 통하는 통로를 다음 각 호의 기준에 따라 설치하여야 한다. <개정 2010.12.13, 2015.9.22, 2016.5.17, 2017.2.3>





Check(EDBA_41_1){

    KS

}







KS{



   Door  myDoor {
getObjectProperty(Door.functionType) = "Main"
   }

   Stair myStair{
isAccessible(Stair, Ground) = TRUE
isObjectProperty(Stair.isEscape) = TRUE

       OR isObjectProperty(Stair.isSpecialEscape) = TRUE



   }

   Passage  myPassage{

       isGoThrough(myStair, Road, Passage)=True

       OR isGoThrough(myStair, OpenSpace, Passage )=True

   }



   isExist(myDoor)=True

   isExist(myPassage)=True

   getResult(EDBA_41_1_1)=True

   getResult(EDBA_41_1_2)=True

   getResult(EDBA_41_1_3)=True

} 








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)) 





Modify
30
34679 건축법 시행령 제 61조 1 항

①법 제52조제1항에서 "대통령령으로 정하는 용도 및 규모의 건축물"이란 다음 각 호의 어느 하나에 해당하는 건축물을 말한다. 다만, 그 주요구조부가 내화구조 또는 불연재료로 되어 있고 그 거실의 바닥면적(스프링클러나 그 밖에 이와 비슷한 자동식 소화설비를 설치한 바닥면적을 뺀 면적으로 한다. 이하 이 조에서 같다) 200제곱미터 이내마다 방화구획이 되어 있는 건축물은 제외한다. <개정 2009.7.16, 2010.2.18, 2010.12.13, 2013.3.23, 2014.3.24, 2014.8.27, 2014.10.14, 2015.9.22, 2017.2.3>





//건축법 시행령 61조 (건축물의 마감재료) 1항

Check(EDBA_61_1){

   IF !CS THEN  KS

}



CS{

 (isObjectProperty(MainStructuralPart.isFireResistantStructure)=TRUE

 OR isObjectProperty(MainStructuralPart.Material.nonCombustibility)=TRUE)

 

 isFirePartition(Room.Floor, a, 200)=TRUE



 

}



KS{

    getResult(EDBA_61_1_1)=TRUE

    OR getResult(EDBA_61_1_2)=TRUE

    OR getResult(EDBA_61_1_3)=TRUE

    OR getResult(EDBA_61_1_4)=TRUE

    OR getResult(EDBA_61_1_5)=TRUE

    OR getResult(EDBA_61_1_6)=TRUE

    OR getResult(EDBA_61_1_7)=TRUE

} 




Python Code 변환 예정



Modify
31
34689 건축법 시행령 제 61조 1 항 6호

6. 문화 및 집회시설, 종교시설, 판매시설, 운수시설, 의료시설, 교육연구시설 중 학교(초등학교만 해당한다)·학원, 노유자시설, 수련시설, 업무시설 중 오피스텔, 숙박시설, 위락시설(단란주점 및 유흥주점은 제외한다), 장례시설, 「다중이용업소의 안전관리에 관한 특별법 시행령」 제2조에 따른 다중이용업(단란주점영업 및 유흥주점영업은 제외한다)의 용도로 쓰는 건축물





Check(EDBA_61_1_6){
KS}


KS{
(getBuildingUsage()="ClassIINeighborhoodLivingFacility.PerformanceHall"
OR getBuildingUsage()="ClassIINeighborhoodLivingFacility.BilliardRoom")
OR getBuildingUsage()="CulturalAndAssemblyFacility.WeddingHall"
OR getBuildingUsage()="EducationAndResearchFacility.ElementarySchool"
OR getBuildingUsage()="Trainingfacility"
OR (getBuildingUsage()="AmusementFacility.BarBusiness"
OR  getResult(ERSASP_2)= TRUE)
}
 




Python Code 변환 예정



Modify
32
36281 건축법 시행령 제 8조 3 항

③ 법 제11조제2항제2호에서 "위락시설과 숙박시설 등 대통령령으로 정하는 용도에 해당하는 건축물"이란 다음 각 호의 건축물을 말한다. <개정 2008.10.29>





//건축법 시행령 8조 (건축허가) 3항

Check(EDBA_8_3){
     KS
}

KS{
    getResult(EDBA_8_3_1)=True
    OR getResult(EDBA_8_3_2)=True
    OR getResult(EDBA_8_3_3)=True
    OR getResult(EDBA_8_3_4)=True
    OR getResult(EDBA_8_3_5)=True
   
} 




Python Code 변환 예정



Modify
33
36575 건축법 시행령 제 34조 2 항 4호

4. 제1호부터 제3호까지의 용도로 쓰지 아니하는 3층 이상의 층으로서 그 층 거실의 바닥면적의 합계가 400제곱미터 이상인 것





//건축법 시행령 34조 (직통계단의 설치) 2항4호
check(EDBA_34_2_4){

     IF getResult(EDBA_34_2_1)=FALSE
        OR getResult(EDBA_34_2_2)=FALSE
	OR getResult(EDBA_34_2_3)=FALSE
	   THEN getTotalFloorNumber(myFloor.Room)>=400 m2
     END IF
} 




Python Code 변환 예정



Modify
34
36578 건축법 시행령 제 35조 1 항

① 법 제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
} 




Python Code 변환 예정



Modify
35
36582 건축법 시행령 제 35조 3 항

③ 제1항에서 판매시설의 용도로 쓰는 층으로부터의 직통계단은 그 중 1개소 이상을 특별피난계단으로 설치하여야 한다. <개정 2008.10.29>





//건축법 시행령 35조 (피난계단의 설치) 3항
check(EDBA_35_3){
	IF (CS) THEN KS
CS{
	getResult(EDBA_35_1) = TRUE

	Floor myFloor {
		Floor.usage = “CommercialFacility”
	}

	Stair myStair{
		isObjectProperty(Stair.isDirect) = TRUE
	}

	isAccessible(myFloor, myStair) = TRUE
}

KS{
	isObjectProperty(one.myStair.isSpecialEscape) = TRUE
}
 




Python Code 변환 예정



Modify
36
36586 건축법 시행령 제 36조

제36조 (옥외 피난계단의 설치) 건축물의 3층 이상인 층(피난층은 제외한다)으로서 다음 각 호의 어느 하나에 해당하는 용도로 쓰는 층에는 제34조에 따른 직통계단 외에 그 층으로부터 지상으로 통하는 옥외피난계단을 따로 설치하여야 한다.





//건축법 시행령 36조 (옥외 피난계단의 설치)

Check(EDBA_36){
    IF CS THEN KS
}

CS{
   getBuildingStoriesCount()>=3
   getResult(EDBA_36_0_1)=True
   OR getResult(EDBA_36_0_2)=True
}

KS{
   Stair myStair1{
       isObjectProperty(Stair.isDirect)=True
   }
   
   Stair myStair2{
       isObjectProperty(Stair.isEscape)=True
       isAccessible(Stair, Ground)=True
   }
  
   isExist(myStair1)=True
   isExist(myStair2)=True
} 




Python Code 변환 예정



Modify
37
36588 건축법 시행령 제 38조

제38조 (관람석 등으로부터의 출구 설치) 법 제49조제1항에 따라 다음 각 호의 어느 하나에 해당하는 건축물에는 국토해양부령으로 정하는 기준에 따라 관람석 또는 집회실로부터의 출구를 설치하여야 한다.





//건축법 시행령 38조(관람석 등으로부터의 출구 설치)

Check(EDBA_38){

  IF (CS) THEN  KS ENDIF

}



CS{

    getResult(EDBA_38_0_1) = TRUE

    OR getResult(EDBA_38_0_2) = TRUE

    OR getResult(EDBA_38_0_3) = TRUE

    OR getResult(EDBA_38_0_4) = TRUE

    OR getResult(EDBA_38_0_5) = TRUE

}



KS {

    Space mySpace = getSpace("Auditorium")+getSpace("AssemblyHall")



    Door myExit {

        isObjectProperty(Door.isEntrance) = TRUE

        isAccessible(mySpace, Door) = TRUE

        getResult(REFB_10_1) = TRUE

    }



    hasElement(mySpace, myExit)=TRUE 

} 








identified_space_codes =['33703', '33708']
min_area = 300
min_door_width = 1.5
min_door_count = 2
identified_space_codes_label ='해당 공간 명칭'
min_area_label = '바닥면적이 다음 미만일 경우 제외(m2)'
min_door_width_label = '출구 유효너비'
min_door_count_label = '유효너비 이상 최소 출구 개수'

def Check():
    for space in SELECT('space'):
        name = space.SELECT('name').STRING()
        code = space.SELECT('class code').STRING()

        if not code in identified_space_codes:
            continue
                
        area = space.SELECT('area').UNIT('m2').NUMBER()
        if area >= min_area:
            exitCnt = 0
            door_width_sum = 0
            inward_exist = False

            for door in space.SELECT('space door'):
                if door.SELECT('is inward', space).BOOL() == False:
                    door_width = door.SELECT('width').UNIT('m2').NUMBER()
                    if door_width >= min_door_width:
                        exitCnt += 1
                        door_width_sum += door_width
                else:
                    door.ERROR('안여닫이 출구')
                    inward_exist = True
                    
            if inward_exist == True:
                continue

            if exitCnt >= min_door_count:
                if door_width_sum >= (area / 100) * 0.6:
                    space.SUCCESS(name)
                else:
                    space.ERROR(name + ', 출구유효너비 합: ' + str(door_width_sum) + 'm, 바닥면적: ' + str(area) + 'm2')
            else:
                space.ERROR(name + ', 출구 수 : ' + str(exitCnt) + '( < ' + str(min_door_count) + ')')
        else:
            space.SUCCESS('바닥면적:' + str(area) + '㎡ ( < ' + str(min_area) + '㎡)') 





Modify
38
36590 건축법 시행령 제 39조 1 항

① 법 제49조제1항에 따라 다음 각 호의 어느 하나에 해당하는 건축물에는 국토해양부령으로 정하는 기준에 따라 그 건축물로부터 바깥쪽으로 나가는 출구를 설치하여야 한다.





// 건축법 시행령 39조 (건축물 바깥쪽으로의 출구 설치) 1항 

Check(EDBA_39_1){     
IF  CS THEN KS
}

CS {
getResult(EDBA_39_1_1) = TRUE
OR getResult(EDBA_39_1_2) = TRUE
OR getResult(EDBA_39_1_3) = TRUE
OR getResult(EDBA_39_1_4) = TRUE
OR getResult(EDBA_39_1_5) = TRUE
OR getResult(EDBA_39_1_6) = TRUE
OR getResult(EDBA_39_1_7) = TRUE
OR getResult(EDBA_39_1_8) = TRUE
OR getResult(EDBA_39_1_9) = TRUE
OR getResult(EDBA_39_1_10) = TRUE
}

KS {
Door myDoor{
 isObjectProperty(Door.isEntrance)=TRUE
}

isExist(myDoor)=TRUE

getResult(REFB_11_1)=TRUE
getResult(REFB_11_2)=TRUE
getResult(REFB_11_3)=TRUE
getResult(REFB_11_4)=TRUE
getResult(REFB_11_5)=TRUE
getResult(REFB_11_6)=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) + ')')
 





Modify
39
36600 건축법 시행령 제 39조 2 항

② 법 제49조제1항에 따라 건축물의 출입구에 설치하는 회전문은 국토해양부령으로 정하는 기준에 적합하여야 한다.





// 건축법 시행령 39조 (건축물 바깥쪽으로의 출구 설치) 2항

Check(EDBA_39_2){     
IF  CS THEN KS
}

CS {
Door myDoor {
isObjectProperty(Door.isEntrance) = TRUE
Door.panelOperationType=“RevolvingDoor”
}
isExist(myDoor) = TRUE
}

KS {
getResult(REFB_11_2)=TRUE
}
 




Python Code 변환 예정



Modify
40
36606 건축법 시행령 제 44조

제44조 (피난 규정의 적용례) 건축물이 창문, 출입구, 그 밖의 개구부(開口部)(이하 "창문등"이라 한다)가 없는 내화구조의 바닥 또는 벽으로 구획되어 있는 경우에는 그 구획된 각 부분을 각각 별개의 건축물로 보아 제34조부터 제41조까지를 적용한다.





//건축법 시행령 44조 (피난 규정의 적용례)



Check(EDBA_44){

   IF CS THEN KS

}



CS{

   Door myDoor{

      isObjectProperty(Door.isEntrance)=True

   }



   Object  myElement {

        getObject(Window)

        getObject(Opening)

        getObject(myDoor)

   }

   

   FloorSlab myFloorSlab{



        getObjectProperty(FloorSlab.isFireResistantStructure)=True

   }



     Wall myWall{

        getObjectProperty(FloorSlab.isFireResistantStructure)=True

        hasObject(Wall, myElement) =False

   }



   isFirePartition(Building, myFloorSlab)=True

   OR  isFirePartition(Building, myWall)=True

   



}



KS{

   getResult(EDBA_34)=True

   getResult(EDBA_35)=True

   getResult(EDBA_36)=True

   getResult(EDBA_37)=True

   getResult(EDBA_38)=True

   getResult(EDBA_39)=True

   getResult(EDBA_40)=True

   getResult(EDBA_41)=True

} 




Python Code 변환 예정



Modify
41
36608 건축법 시행령 제 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 변환 예정



Modify
42
36609 건축법 시행령 제 46조 2 항

② 다음 각 호의 어느 하나에 해당하는 건축물의 부분에는 제1항을 적용하지 아니하거나 그 사용에 지장이 없는 범위에서 제1항을 완화하여 적용할 수 있다.





//건축법 시행령 46조 (방화구획의 설치) 2항
check(EDBA_46_2){
IF CS THEN KS
}

KS{ 
getResult(EDBA_46_1)=FALSE
}

CS{
getResult(EDBA_46_2_2)=TRUE
OR getResult(EDBA_46_2_3)=TRUE
OR getResult(EDBA_46_2_4)=TRUE
OR getResult(EDBA_46_2_5)=TRUE
OR getResult(EDBA_46_2_6)=TRUE
OR getResult(EDBA_46_2_7)=TRUE 
} 




Python Code 변환 예정



Modify
43
36617 건축법 시행령 제 46조 3 항

③ 건축물의 일부가 법 제50조제1항에 따른 건축물에 해당하는 경우에는 그 부분과 다른 부분을 방화구획으로 구획하여야 한다.





//건축법 시행령 46조 (방화구획의 설치) 3항
check(EDBA_46_3){
KS
}

KS{
getResult(BA_50_1)=TRUE
AND isGroupedFirePartition()=TRUE
} 




Python Code 변환 예정



Modify
44
36618 건축법 시행령 제 46조 4 항

④ 공동주택 중 아파트로서 4층 이상인 층의 각 세대가 2개 이상의 직통계단을 사용할 수 없는 경우에는 발코니에 인접 세대와 공동으로 또는 각 세대별로 다음 각 호의 요건을 모두 갖춘 대피공간을 하나 이상 설치하여야 한다. 이 경우 인접 세대와 공동으로 설치하는 대피공간은 인접 세대를 통하여 2개 이상의 직통계단을 쓸 수 있는 위치에 우선 설치되어야 한다.





//건축법 시행령 46조 (방화구획의 설치) 4항

check(EDBA_46_4){

IF CS THEN KS1 AND KS2

}



Zone myZone{

     isObjectProperty(Zone.isOccupiedByOneHousehold) = TRUE

}



KS1{
Space mySpace{
Space.isEscape = TRUE
}

isExist(Balcony)=TRUE

AND hasElement(Balcony,mySpace)=TRUE

AND (getResult(EDBA_46_4_1)=TRUE

AND getResult(EDBA_46_4_2)=TRUE

AND getResult(EDBA_46_4_3)=TRUE

AND getResult(EDBA_46_4_4)=TRUE)

}



KS2{
Stair myStair{
Stair.isDirect = TRUE
}

isGoThrough(myZone,mySpace,myZone)=TRUE

AND isGoThrough(mySpace,myZone,myStair)=TRUE

}



CS{

getBuildingUsage()="MultiUnitHouses.ApartmentHouses"

AND Floor.number >=4

AND isDirectlyAccessible(myZone, myStair)=TRUE

AND myStair.Number>=2

} 




Python Code 변환 예정



Modify
45
36623 건축법 시행령 제 46조 5 항

⑤ 제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

} 




Python Code 변환 예정



Modify
46
36630 건축법 시행령 제 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
                         





Modify
47
36631 건축법 시행령 제 48조 2 항

② 법 제49조제2항에 따라 제39조제1항 각 호의 어느 하나에 해당하는 건축물의 출입구는 국토해양부령으로 정하는 기준에 적합하여야 한다.





//건축법 시행령 48조 (계단ㆍ복도 및 출입구의 설치)2항

Check(EDBA_48_2){
     IF CS THEN KS 
}

CS{
    getResult(EDBA_39_1_1)=True
    OR  getResult(EDBA_39_1_2)=True
    OR  getResult(EDBA_39_1_3)=True
    OR  getResult(EDBA_39_1_4)=True
    OR  getResult(EDBA_39_1_5)=True
    OR  getResult(EDBA_39_1_6)=True
    OR  getResult(EDBA_39_1_7)=True
    OR  getResult(EDBA_39_1_8)=True
    OR  getResult(EDBA_39_1_9)=True
    OR  getResult(EDBA_39_1_10)=True
}

KS{
   getResult(REFB_11_1)=True
   getResult(REFB_11_2)=True
   getResult(REFB_11_3)=True
   getResult(REFB_11_4)=True
   getResult(REFB_11_5)=True
   getResult(REFB_11_6)=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) + ')')
 





Modify
48
36632 건축법 시행령 제 50조

제50조 (거실반자의 설치) 법 제49조제2항에 따라 공장, 창고시설, 위험물저장 및 처리시설, 동물 및 식물 관련 시설, 분뇨 및 쓰레기처리시설 또는 묘지 관련시설 외의 용도로 쓰는 건축물 거실의 반자(반자가 없는 경우에는 보 또는 바로 위층의 바닥판의 밑면, 그 밖에 이와 비슷한 것을 말한다)는 국토해양부령으로 정하는 기준에 적합하여야 한다.





// 건축법 시행령 50조 (거실반자의 설치)
check(EDBA_50){
	IF (CS) THEN KS
}

CS{
	Building.usage != "Factory"
	OR Building.usage != "Warehouse"
	OR Building.usage != "FacilityForStorageAndTreatmentOfDangerousSubstance"
	OR Building.usage != "FacilityForAnimalAndPlant"
	OR Building.usage != "ResourceRecyclingFacility"
	OR Building.usage != "CemeteryAndRelatedFacility"
}

KS{
	getResult(REFB_16_1) = TRUE
	getResult(REFB_16_2) = TRUE
}
 








min_h = 2.1
min_h_label = '최소 반자 높이'

def Check():
    for space in SELECT('space'):
        dist = space.SELECT('ceiling height')
        height = dist.UNIT('m').NUMBER()
        if height < min_h:
            dist.ERROR('반자 높이 : ' + str(height) + ' < ' + str(min_h))
        else:
            dist.SUCCESS('반자 높이 : ' + str(height) + ' >= ' + str(min_h)) 





Modify
49
36635 건축법 시행령 제 51조 2 항

② 법 제49조제2항에 따라 6층 이상인 건축물로서 문화 및 집회시설, 종교시설, 판매시설, 운수시설, 의료시설, 교육연구시설 중 연구소, 노유자시설 중 아동 관련 시설·노인복지시설, 수련시설 중 유스호스텔, 운동시설, 업무시설, 숙박시설, 위락시설, 관광휴게시설 및 장례식장의 거실에는 국토해양부령으로 정하는 기준에 따라 배연설비(排煙設備)를 하여야 한다. 다만, 피난층인 경우에는 그러하지 아니하다.





//건축법 시행령 51조 (거실의 채광 등) 2항
Check(EDBA_51_2){
	IF (!CS1 AND CS2) THEN KS
}


CS1{
	Floor myFloor{
		isObjectProperty(Floor.isEscape) = TRUE
	}
	getFloorNumber(Room) = getFloorNumber(myFloor)
}

CS2{
	getBuildingStoriesCount() >= 6
	getResult(EDBA_51_2_1) = True
	OR getResult(EDBA_51_2_2) = True
	OR getResult(EDBA_51_2_3) = True
	OR getResult(EDBA_51_2_4) = True
	OR getResult(EDBA_51_2_5) = True
	OR getResult(EDBA_51_2_6) = True
	OR getResult(EDBA_51_2_7) = True
	OR getResult(EDBA_51_2_8) = True
	OR getResult(EDBA_51_2_9) = True
	OR getResult(EDBA_51_2_10) = True
	OR getResult(EDBA_51_2_11) = True
	OR getResult(EDBA_51_2_12) = True
	OR getResult(EDBA_51_2_13) = True
	OR getResult(EDBA_51_2_14) = True
	OR getResult(EDBA_51_2_15) = True
}

KS{
	hasSpace(Room, SmokeExhaustionSystem) = True
	getResult(RFB_14_1) = True
	getResult(REFB_17_1) = True
	getResult(REFB_17_2) = True
}
 




Python Code 변환 예정



Modify
50
36636 건축법 시행령 제 52조

제52조 (거실 등의 방습) 법 제49조제2항에 따라 다음 각 호의 어느 하나에 해당하는 거실·욕실 또는 조리장의 바닥 부분에는 국토해양부령으로 정하는 기준에 따라 방습을 위한 조치를 하여야 한다.





//건축법 시행령 52조 (거실 등의 방습)
Check(EDBA_52){
IF CS THEN KS}

CS{
  getResult(EDBA_52_0_1)=TRUE
  OR getResult(EDBA_52_0_2)=TRUE
  OR getResult(EDBA_52_0_3)=TRUE
  getObject(Floor)
}

KS{
  getResult(REFB_18_1)=TRUE
  AND getResult(REFB_18_2)=TRUE
} 




Python Code 변환 예정



Modify
51
36644 건축법 시행령 제 56조 1 항 3호

3. 공장의 용도로 쓰는 건축물로서 그 용도로 쓰는 바닥면적의 합계가 2천 제곱미터 이상인 건축물. 다만, 화재의 위험이 적은 공장으로서 국토해양부령으로 정하는 공장은 제외한다.





//건축법 시행령 56조 (건축물의 내화구조와 방화벽) 1항 3호
check(EDBA_56_1_3){
	IF !(CS) THEN KS
}

CS{
	getResult(REFB_20-2) = TRUE
}

KS{
	Floor myFloor{
		getObjectUsage(Floor) = "Factory"
	}

	getTotalFloorArea(myFloor.Space) >= 2000 m2
} 




Python Code 변환 예정



Modify
52
36647 건축법 시행령 제 56조 2 항

② 제1항제1호 및 제2호에 해당하는 용도로 쓰지 아니하는 건축물로서 그 지붕틀을 불연재료로 한 경우에는 그 지붕틀을 내화구조로 아니할 수 있다.





//건축법 시행령 56조 (건축물의 내화구조) 2항

check(EDBA_56_2){

	IF (!CS1 AND CS2) THEN !KS



CS1{

        getResult(EDBA_56_1_1)=TRUE

        AND getResult(EDBA_56_1_2)=TRUE

}



CS2{

        getObjectMaterialType(RoofTruss)= "NonCombustibleMaterial"

}



KS{

        isFireResistantStructure(RoofTruss) = TRUE

} 




Python Code 변환 예정



Modify
53
36649 건축법 시행령 제 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 변환 예정



Modify
54
36650 건축법 시행령 제 57조 2 항

② 제1항에 따른 방화벽의 구조에 관하여 필요한 사항은 국토해양부령으로 정한다.





check(EDBA_57_2){
	KS
}

KS{
	getResult(REFB_21_1) = TRUE 			
} 




Python Code 변환 예정



Modify
55
36652 건축법 시행령 제 58조

제58조 (방화지구의 건축물) 법 제51조제1항에 따라 그 주요구조부 및 외벽을 내화구조로 하지 아니할 수 있는 건축물은 다음 각 호와 같다.





check(EDBA_58){
	KS
}

KS{
	getResult(EDBA_58_0_1) = TRUE;
	getResult(EDBA_58_0_2) = TRUE;
}

 




Python Code 변환 예정



Modify
56
36656 건축법 시행령 제 80조

제80조 (건축물이 있는 대지의 분할제한) 법 제57조제1항에서 "대통령령으로 정하는 범위"란 다음 각 호의 어느 하나에 해당하는 규모 이상을 말한다.





//건축법 시행령 80조 (건축물이 있는 대지의 분할제한) 

Check(EDBA_80){
     KS
}
KS{
	getResult(EDBA_80_1) = TRUE
	getResult(EDBA_80_2) = TRUE
	getResult(EDBA_80_3) = TRUE
	getResult(EDBA_80_4) = TRUE
	getResult(EDBA_80_5) = TRUE
} 




Python Code 변환 예정



Modify
57
36663 건축법 시행령 제 81조 3 항

③ 법 제59조제1항제1호에 따른 맞벽은 방화벽이어야 한다. <개정 2008.10.29>





//  건축법 시행령 81조 (맞벽건축 및 연결복도) 3항
Check(EDBA_81_3){
	KS
}

KS{
	getResult(EDBA_81_3_1) = TRUE
	getResult(EDBA_81_3_2) = TRUE
} 




Python Code 변환 예정



Modify
58
36706 건축법 시행령 제 90조 1 항

① 법 제64조제2항에 따라 높이 31미터를 넘는 건축물에는 다음 각 호의 기준에 따른 대수 이상의 비상용 승강기(비상용 승강기의 승강장 및 승강로를 포함한다. 이하 이 조에서 같다)를 설치하여야 한다. 다만, 법 제64조제1항에 따라 설치되는 승강기를 비상용 승강기의 구조로 하는 경우에는 그러하지 아니하다.





//건축법 시행령 90조 (비상용 승강기의 설치) 1항

Check(EDBA_90_1){
  IF (!CS1 AND CS2) THEN KS

}

CS1{
    getResult(BA_64_1)=TRUE
    isObjectProperty(Elevator.isEmergency)=TRUE
    
}

CS2{
    getBuildingHeight()>31 m
}

KS{
    getResult(EDBA_90_1_1)=TRUE
    getReslut(EDBA_90_1_2)=TRUE
} 




Python Code 변환 예정



Modify
59
36710 건축법 시행령 제 90조 3 항

③ 건축물에 설치하는 비상용 승강기의 구조 등에 관하여 필요한 사항은 국토해양부령으로 정한다.





//건축법 시행령 90조 (비상용 승강기의 설치) 3항

Check(EDBA_90_3){
        KS
}


KS{
     getResult(RFB_14_2)=True
  
} 




Python Code 변환 예정



Modify
60
37042 건축법 시행령 제 56조 1 항

① 법 제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

} 




Python Code 변환 예정



Modify
61
37047 건축법 시행령 제 56조 1 항 5호

5. 3층 이상인 건축물 및 지하층이 있는 건축물. 다만, 단독주택(다중주택 및 다가구주택은 제외한다), 동물 및 식물 관련 시설, 발전시설(발전소의 부속용도로 쓰는 시설은 제외한다), 교도소·감화원 또는 묘지 관련 시설(화장장은 제외한다)의 용도로 쓰는 건축물과 철강 관련 업종의 공장 중 제어실로 사용하기 위하여 연면적 50제곱미터 이하로 증축하는 부분은 제외한다.





//건축법 시행령 56조 (건축물의 내화구조) 1항 5호

check(EDBA_56_1_5){

	IF !CS THEN KS

}

Building myBuilding{

     getBuildingUsage() = "PowerPlant"

     isObjectProperty(Building.isAttachedBuilding) = TRUE

}


Building  myBuilding{

     getResult(REFB_*_3_30) = TRUE

     getResult(REFB_*_3_31) = TRUE

}



CS{

         getBuildingUsage() = "facilities for animals and plants"

                                       

                              | "facilities for power generation"

                              | "correctional facilities and military installations.prison"

                              | "correctional facilities and military installations.reformatories 

                              | "myFactory"



	 OR (getBuildingUsage() = "detached houses"

             AND getBuildingUsage() != "detached houses.multi-user houses" 

                                     | "detached houses.multi-family houses" )



	 OR (getBuildingUsage() = "facilities for power generation" 

	 AND (getBuildingUsage() = "myBuilding"



	 OR (getBuildingUsage() = "cemeteries and related facilities"

	 AND getBuildingUsage() != "Crematorium") 





}



KS{

Floor myFloor{
Floor.number < 0
}

          getBuildingStoriesCount() >= 3 

	  AND isExist(myFloor) = TRUE

} 




Python Code 변환 예정



Modify
62
37352 건축법 시행령 제 34조 1 항

① 건축물의 피난층(직접 지상으로 통하는 출입구가 있는 층을 말한다. 이하 같다) 외의 층에서는 피난층 또는 지상으로 통하는 직통계단(경사로를 포함한다. 이하 같다)을 거실의 각 부분으로부터 계단(거실로부터 가장 가까운 거리에 있는 계단을 말한다)에 이르는 보행거리가 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)) 





Modify
63
37353 건축법 시행령 제 34조 2 항

② 법 제49조제1항에 따라 피난층 외의 층이 다음 각 호의 어느 하나에 해당하는 용도 및 규모의 건축물에는 국토해양부령으로 정하는 기준에 따라 피난층 또는 지상으로 통하는 직통계단을 2개소 이상 설치하여야 한다. <개정 2009.7.16>





//건축법 시행령 34조 (직통계단의 설치) 2항

Check(EDBA_34_2){

   IF (CS1 AND CS2) THEN KS

}



CS1{

	isObjectProperty(Floor.isEscape) = FALSE

}



CS2{

	getResult(EDBA_34_2_1)=TRUE

   	OR getResult(EDBA_34_2_2)=TRUE

   	OR getResult(EDBA_34_2_3)=TRUE  

   	OR getResult(EDBA_34_2_4)=TRUE

   	OR getResult(EDBA_34_2_5)=TRUE

}



KS{

        Floor myFloor{

        isObjectProperty(Floor.isEscape)=TRUE

        }



   	Stair myStair{

      		isObjectProperty(Stair.isDirect) = TRUE

      		isAccessible(myFloor, Stair)= TRUE

      		OR isAccessible(Ground,Stair) = TRUE

   	}



   	getObjectCount(myStair)>2 

   	getResult(REFB_8_1) = True

} 




Python Code 변환 예정



Modify
64
37368 건축법 시행령 제 35조 5 항

⑤ 건축물의 5층 이상인 층으로서 문화 및 집회시설 중 전시장 또는 동·식물원, 판매시설, 운수시설(여객용 시설만 해당한다), 운동시설, 위락시설, 관광휴게시설(다중이 이용하는 시설만 해당한다) 또는 수련시설 중 생활권 수련시설의 용도로 쓰는 층에는 제34조에 따른 직통계단 외에 그 층의 해당 용도로 쓰는 바닥면적의 합계가 2천 제곱미터를 넘는 경우에는 그 넘는 2천 제곱미터 이내마다 1개소의 피난계단 또는 특별피난계단(4층 이하의 층에는 쓰지 아니하는 피난계단 또는 특별피난계단만 해당한다)을 설치하여야 한다. <개정 2008.10.29, 2009.7.16>





//건축법 시행령 35조 (피난계단의 설치) 5항
check(EDBA_35_5){
	IF (CS) THEN KS
}

CS{
	Floor myFloor{
		Floor.number >= 5
		OR Floor.usage = "CulturalAndAssemblyFacility.ExhibitionHall"
		OR Floor.usage = "CulturalAndAssemblyFacility.ZoologicalAndBotanicalGarden"
		OR Floor.usage = "CommercialFacility"
		OR Floor.usage = "PassengerTrafficFacilities“??
		OR Floor.usage = "SportsFacility"
		OR Floor.usage = "AmusementFacility"
		OR Floor.usage = "FacilityForTourismAndRelaxation“???
		OR Floor.usage = "Trainingfacility.TrainingFacilityInLivingZone“
	}

	isExist(myFloor)=True           
}

KS{	
	Stair myStair2{
		isObjectProperty(Stair.isSpecialEscape) = True
		OR isObjectProperty(Stair.isEscape) = True
	}

	getResult(EDBA_34) = TRUE

	IF (getTotalFloorArea(myFloor.Space) >= 2000m2) 		
		THEN getObjectCount(myStair2) >= 1+ getFloorArea(myFloor.Space)/2000
}
 




Python Code 변환 예정



Modify
65
37373 건축법 시행령 제 40조 3 항

③ 층수가 11층 이상인 건축물로서 11층 이상인 층의 바닥면적의 합계가 1만 제곱미터 이상인 건축물(지붕을 평지붕으로 하는 경우만 해당한다)의 옥상에는 국토해양부령으로 정하는 기준에 따라 헬리포트를 설치하거나 헬리콥터를 통하여 인명 등을 구조할 수 있는 공간을 확보하여야 한다. <개정 2009.7.16>





//건축법 시행령 40조 (옥상광장 등의 설치) 3항
Check(EDBA_40_3){
  IF (CS) THEN KS 
}

CS{
	Floor myFloor{
		Floor.number > 11
	}

   	getBuildingStoriesCount() > 11
   	getTotalFloorArea(myFloor) > 10000m2
}

KS{
  getResult(EDBA_40_3_1) = True
  getResult(EDBA_40_3_2) = True
}
 




Python Code 변환 예정



Modify
66
37375 건축법 시행령 제 47조 1 항

① 법 제49조제2항에 따라 의료시설, 노유자시설(아동 관련 시설 및 노인복지시설만 해당한다), 공동주택 또는 장례식장과 위락시설, 위험물저장 및 처리시설, 공장 또는 자동차 관련 시설(정비공장만 해당한다)은 같은 건축물에 함께 설치할 수 없다. 다만, 다음 각 호의 어느 하나에 해당하는 경우로서 국토해양부령으로 정하는 경우에는 그러하지 아니하다. <개정 2009.7.16>





//건축법 시행령 47조 (방화에 장애가 되는 용도의 제한) 1항

Check(EDBA_47_1){
   IF !CS THEN KS
}

CS{
   getResult(EDBA_47_1_1)=True
   OR getResult(EDBA_47_1_3)=True

   getResult(REFB_14-2)=True
}

KS{
   Space mySpace1{
      getSpaceUsage(Space)="MedicalFacility"
      OR getSpaceUsage(Space)="FacilitiesForTheAgedAndChildren.ChildrenRelatedFacility"
      OR getSpaceUsage(Space)="FacilitiesForTheAgedAndChildren.WelfareFacilityForTheAged"
      OR getSpaceUsage(Space)="MultiUnitHouse"
   }

   Space mySpace2{
      getSpaceUsage(Space)="FuneralParlor"
      OR getSpaceUsage(Space)="AmusementFacility"
      OR getSpaceUsage(Space)="FacilityForStorageAndTreatmentOfDangerousSubstance"
      OR getSpaceUsage(Space)="Factory"
      OR getSpaceUsage(Space)="FacilityForMotorVehicle.AutomobileRepairShop"

    
   isExistTogether(mySpace1, mySpace2)=False
    
   }
   
}  




Python Code 변환 예정



Modify
67
37379 건축법 시행령 제 47조 2 항

② 법 제49조제2항에 따라 다음 각 호의 어느 하나에 해당하는 용도의 시설은 같은 건축물에 함께 설치할 수 없다. <개정 2009.7.16>





//건축법 시행령 47조 (방화에 장애가 되는 용도의 제한) 2항 



Check(EDBA_47_2){

      KS

}



  Space  myFacility{

    getResult(EDBA_47_2_1)=True

  } 



  Space  myFacility2{

    OR getResult(EDBA_47_2_2)=True

  } 

     



KS{

    isShared(myFacility.Building, myFacility2.Building)=False

} 




Python Code 변환 예정



Modify
68
37385 건축법 시행령 제 51조 3 항

③ 법 제49조제2항에 따라 오피스텔에 거실 바닥으로부터 높이 1.2미터 이하 부분에 여닫을 수 있는 창문을 설치하는 경우에는 국토해양부령으로 정하는 기준에 따라 추락방지를 위한 안전시설을 설치하여야 한다. <신설 2009.7.16>





// 건축법 시행령 51조 (거실의 채광 등) 3항

check(EDBA_51_3){

	IF CS THEN KS

}



CS{

Window myWindow{
getObjectProperty(Window.panelOperationType) = "SwingingWindow"
}
	getBuildingUsage() = "Officetels.Room"

	getElementHeight(myWindow) <= 1.2 m

}



KS{

	isExist(FallPreventionSafetyFacility) = TRUE

	getResult(REFB_17_4) = TRUE

} 








min_win_h = 1.2
min_rail_h = 1.2
min_win_h_label = '기준 창문 높이'
min_rail_h_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 == '오피스텔'):
            continue
        for space in building.SELECT('space'):
            for win in space.SELECT('window'):
                if win.SELECT('lower edge height').UNIT('m').NUMBER() > min_win_h:
                    continue
                for railing in win.SELECT('railing'):
                    height = railing.SELECT('height').UNIT('m')
                    h = height.NUMBER()
                    if h < min_rail_h:
                        height.ERROR('난간 높이: ' + str(h) + 'm(< ' + str(min_rail_h) + 'm)')
                    else:
                        height.SUCCESS('난간 높이: ' + str(h) + 'm(>= ' + str(min_rail_h) + 'm)')

                    return

                win.ERROR('난간이 존재하지 않습니다.') 





Modify
69
37427 건축법 시행령 제 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 변환 예정



Modify
70
71631 건축법 시행령 제 38조 2호

2. 문화 및 집회시설(전시장 및 동ㆍ식물원은 제외한다)





//건축법 시행령 38조(관람석 등으로부터의 출구 설치) 2호
Check(EDBA_38_0_2){
     getBuildingUsage() = "CulturalAndAssemblyFacility
"
     getBuildingUsage() != "CulturalAndAssemblyFacility.ExhibitionHall"
     getBuildingUsage() != "CulturalAndAssemblyFacility.ZoologicalAndBotanicalGarden"

     getResult(REFB_10_2) = TRUE
}

 








identified_space_codes =[' 문화 및 집회시설']
min_area = 300
min_door_width = 1.5
min_door_count = 2
identified_space_codes_label ='해당 공간 명칭'
min_area_label = '바닥면적이 다음 미만일 경우 제외(m2)'
min_door_width_label = '출구 유효너비'
min_door_count_label = '유효너비 이상 최소 출구 개수'

def Check():
    for space in SELECT('space'):
        name = space.SELECT('name').STRING()
        code = space.SELECT('class code').STRING()

        if not code in identified_space_codes:
            continue
                
        area = space.SELECT('area').UNIT('m2').NUMBER()
        if area >= min_area:
            exitCnt = 0
            door_width_sum = 0
            inward_exist = False

            for door in space.SELECT('space door'):
                if door.SELECT('is inward', space).BOOL() == False:
                    door_width = door.SELECT('width').UNIT('m2').NUMBER()
                    if door_width >= min_door_width:
                        exitCnt += 1
                        door_width_sum += door_width
                else:
                    door.ERROR('안여닫이 출구')
                    inward_exist = True
                    
            if inward_exist == True:
                continue

            if exitCnt >= min_door_count:
                if door_width_sum >= (area / 100) * 0.6:
                    space.SUCCESS(name)
                else:
                    space.ERROR(name + ', 출구유효너비 합: ' + str(door_width_sum) + 'm, 바닥면적: ' + str(area) + 'm2')
            else:
                space.ERROR(name + ', 출구 수 : ' + str(exitCnt) + '( < ' + str(min_door_count) + ')')
        else:
            space.SUCCESS('바닥면적:' + str(area) + '㎡ ( < ' + str(min_area) + '㎡)') 





Modify
71
40918 국토의 계획 및 이용에 관한 법률 제 77조 2 항

② 제36조제2항에 따라 세분된 용도지역에서의 건폐율에 관한 기준은 제1항 각 호의 범위에서 대통령령으로 따로 정한다.





//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 2항
Check(LPUA_77_1){
	KS
}

KS{
	getResult(LPUA_36_2) = TRUE
} 




Python Code 변환 예정



Modify
72
40922 국토의 계획 및 이용에 관한 법률 제 77조 3 항 3호

3. 제40조에 따른 수산자원보호구역





//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 3항 3호
Check(LPUA_77_3_3){
	KS
}

KS{
	getResult(LPUA_40) = TRUE
	getObjectProperty(SpecialPurposeZone.type) = "FisheryResourcesProtectionZone"
} 




Python Code 변환 예정



Modify
73
43006 국토의 계획 및 이용에 관한 법률 제 77조 1 항

① 제36조에 따라 지정된 용도지역에서 건폐율의 최대한도는 관할 구역의 면적과 인구 규모, 용도지역의 특성 등을 고려하여 다음 각 호의 범위에서 대통령령으로 정하는 기준에 따라 특별시ㆍ광역시ㆍ특별자치시ㆍ특별자치도ㆍ시 또는 군의 조례로 정한다. <개정 2011.4.14, 2013.7.16, 2015.8.11>





//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 1항
Check(LPUA_77_1){
	KS
}

KS{
	getResult(LPUA_77_1_1) = TRUE
	OR getResult(LPUA_77_1_2) = TRUE
	OR getResult(LPUA_77_1_3) = TRUE
	OR getResult(LPUA_77_1_4) = TRUE
} 




Python Code 변환 예정



Modify
74
43019 국토의 계획 및 이용에 관한 법률 제 77조 3 항

③ 다음 각 호의 어느 하나에 해당하는 지역에서의 건폐율에 관한 기준은 제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
} 




Python Code 변환 예정



Modify
75
43020 국토의 계획 및 이용에 관한 법률 제 77조 3 항 1호

1. 제37조제1항제6호에 따른 취락지구





//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 3항 1호
Check(LPUA_77_3_1){
	KS
}

KS{
	getResult(LPUA_37_1_8) = TRUE
	getObjectProperty(SpecialPurposeDistrict.type) = "SettlementDistrict"
} 




Python Code 변환 예정



Modify
76
43021 국토의 계획 및 이용에 관한 법률 제 77조 3 항 2호

2. 제37조제1항제7호에 따른 개발진흥지구(도시지역 외의 지역 또는 대통령령으로 정하는 용도지역만 해당한다)





//국토의 계획 및 이용에 관한 법률 77조 (용도지역의 건폐율) 3항 2호
Check(LPUA_77_3_2){
	KS
}

KS{
	getResult(LPUA_37_1_9) = TRUE
	getObjectProperty(SpecialPurposeDistrict.type) = "DevelopmentPromotionDistrict"
	getObjectProperty(SpecialPurposeArea.type) != "UrbanArea"
} 




Python Code 변환 예정



Modify
77
43750 국토의 계획 및 이용에 관한 법률 제 78조 1 항

① 제36조에 따라 지정된 용도지역에서 용적률의 최대한도는 관할 구역의 면적과 인구 규모, 용도지역의 특성 등을 고려하여 다음 각 호의 범위에서 대통령령으로 정하는 기준에 따라 특별시·광역시·시 또는 군의 조례로 정한다.





// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 1항

Check(LPUA_78_1){
KS
}

KS{
getResult(LPUA_78_1_1)=TRUE
getResult(LPUA_78_1_2)=TRUE
getResult(LPUA_78_1_3)=TRUE
getResult(LPUA_78_1_4)=TRUE
}
 




Python Code 변환 예정



Modify
78
43751 국토의 계획 및 이용에 관한 법률 제 78조 1 항 1호

1. 도시지역





// 국토의 계획 및 이용에 관한 법률 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

}
 




Python Code 변환 예정



Modify
79
43756 국토의 계획 및 이용에 관한 법률 제 78조 1 항 2호

2. 관리지역





// 국토의 계획 및 이용에 관한 법률 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
}
 




Python Code 변환 예정



Modify
80
43762 국토의 계획 및 이용에 관한 법률 제 78조 2 항

② 제36조제2항에 따라 세분된 용도지역에서의 용적률에 관한 기준은 제1항 각 호의 범위에서 대통령령으로 따로 정한다.





//국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 2항 

Check(LPUA_78_2){
     IF CS THEN KS
}

CS{
    getResult(LPUA_36_2)=True
}

KS{
   getResult(LPUA_78_1)=True
} 




Python Code 변환 예정



Modify
81
43763 국토의 계획 및 이용에 관한 법률 제 78조 3 항

③ 제77조제3항제2호부터 제5호까지의 규정에 해당하는 지역에서의 용적률에 대한 기준은 제1항과 제2항에도 불구하고 200퍼센트 이하의 범위에서 대통령령으로 정하는 기준에 따라 특별시·광역시·시 또는 군의 조례로 따로 정한다.





// 국토의 계획 및 이용에 관한 법률 78조 (용도지역에서의 용적률) 3항

Check(LPUA_78_3){
IF CS THEN KS
}
CS{
	getResult(LPUA_77_3_2) = TRUE
	getResult(LPUA_77_3_3) = TRUE
	getResult(LPUA_77_3_4) = TRUE
	getResult(LPUA_77_3_5) = TRUE
}
KS{
	BFA = getObjectProperty(Building.floorAreaRatio)
	BFA <= 200
	getResult(Unimplemented_LGMO) = TRUE 




Python Code 변환 예정



Modify
82
19789 국토의 계획 및 이용에 관한 법률 시행령 제 46조 10 항

⑩제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))

} 




Python Code 변환 예정



Modify
83
47737 국토의 계획 및 이용에 관한 법률 시행령 제 84조 8 항

⑧ 제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
     
} 
 




Python Code 변환 예정



Modify
84
48704 국토의 계획 및 이용에 관한 법률 시행령 제 46조 4 항

④지구단위계획구역에서는 법 제52조제3항의 규정에 의하여 도시ㆍ군계획조례의 규정에 불구하고 지구단위계획으로 제84조에 규정된 범위안에서 건폐율을 완화하여 적용할 수 있다. <개정 2012.4.10>





//국토의 계획 및 이용에 관한 법률 시행령 46조 (도시지역 내 지구단위계획구역에서의 건폐율 등의 완화적용) 4항

Check(EDLPUA_46_4){
     IF CS THEN KS
}


CS{
  
         getObjectUsage(Zone)="DistrictUnitPlanningZones"
}


KS{
         getResult(EDLPUA_84_1)=True
         getResult(EDLPUA_84_1)=True
         getResult(EDLPUA_84_8)=True
} 




Python Code 변환 예정



Modify
85
48841 국토의 계획 및 이용에 관한 법률 시행령 제 84조 1 항

①법 제77조제1항 및 제2항의 규정에 의한 건폐율은 다음 각호의 범위안에서 특별시·광역시·시 또는 군의 도시계획조례가 정하는 비율을 초과하여서는 아니된다.





//	국토의 계획 및 이용에 관한 법률 시행령 84조 (용도지역안에서의 용적률) 1항 
Check(EDLPUA_84_1){
	KS
}

KS{
	getResult(EDLPUA_84_1_1) = TRUE
	OR getResult(EDLPUA_84_1_2) = TRUE
	OR getResult(EDLPUA_84_1_3) = TRUE
	OR getResult(EDLPUA_84_1_4) = TRUE
	OR getResult(EDLPUA_84_1_5) = TRUE
	OR getResult(EDLPUA_84_1_6) = TRUE
	OR getResult(EDLPUA_84_1_7) = TRUE
	OR getResult(EDLPUA_84_1_8) = TRUE
	OR getResult(EDLPUA_84_1_9) = TRUE
	OR getResult(EDLPUA_84_1_10) = TRUE
	OR getResult(EDLPUA_84_1_11) = TRUE
	OR getResult(EDLPUA_84_1_12) = TRUE
	OR getResult(EDLPUA_84_1_13) = TRUE
	OR getResult(EDLPUA_84_1_14) = TRUE
	OR getResult(EDLPUA_84_1_15) = TRUE
	OR getResult(EDLPUA_84_1_16) = TRUE
	OR getResult(EDLPUA_84_1_17) = TRUE
	OR getResult(EDLPUA_84_1_18) = TRUE
	OR getResult(EDLPUA_84_1_19) = TRUE
	OR getResult(EDLPUA_84_1_20) = TRUE
	OR getResult(EDLPUA_84_1_21) = TRUE
} 




Python Code 변환 예정



Modify
86
48871 국토의 계획 및 이용에 관한 법률 시행령 제 84조 4 항

④특별시장·광역시장·시장 또는 군수가 법 제77조제4항제1호의 규정에 의하여 도시지역에서 토지이용의 과밀화를 방지하기 위하여 건폐율을 낮추어야 할 필요가 있다고 인정하여 당해 지방자치단체에 설치된 도시계획위원회의 심의를 거쳐 정한 구역안에서의 건축물의 경우에는 그 건폐율은 그 구역에 적용할 건폐율의 최대한도의 40퍼센트 이상의 범위안에서 특별시·광역시·시 또는 군의 도시계획조례가 정하는 비율을 초과하여서는 아니된다.





용적률) 3항 
Check(EDLPUA_84_3){
	IF CS THEN KS
}
CS{
	getResult(EDLPUA_84_3_1) = TRUE
	getResult(EDLPUA_84_3_2) = TRUE
	getResult(EDLPUA_84_3_3) = TRUE
	getResult(EDLPUA_84_3_4) = TRUE
	getResult(EDLPUA_84_3_5) = TRUE
	getResult(EDLPUA_84_3_6) = TRUE
}
KS{
	getResult(Unimplemented_UPMO) = TRUE
}
 




Python Code 변환 예정



Modify
87
48881 국토의 계획 및 이용에 관한 법률 시행령 제 85조 1 항

①법 제78조제1항 및 제2항의 규정에 의한 용적률은 다음 각호의 범위안에서 관할구역의 면적, 인구규모 및 용도지역의 특성 등을 감안하여 특별시·광역시·시 또는 군의 도시계획조례가 정하는 비율을 초과하여서는 아니된다.





//	국토의 계획 및 이용에 관한 법률 시행령 85조 (용도지역 안에서의 용적률) 1항
Check(EDLPUA_85_1){
	KS
}

KS{
	getResult(EDLPUA_85_1_1) = TRUE
	OR getResult(EDLPUA_85_1_2) = TRUE
	OR getResult(EDLPUA_85_1_3) = TRUE
	OR getResult(EDLPUA_85_1_4) = TRUE
	OR getResult(EDLPUA_85_1_5) = TRUE
	OR getResult(EDLPUA_85_1_6) = TRUE
	OR getResult(EDLPUA_85_1_7) = TRUE
	OR getResult(EDLPUA_85_1_8) = TRUE
	OR getResult(EDLPUA_85_1_9) = TRUE
	OR getResult(EDLPUA_85_1_10) = TRUE
	OR getResult(EDLPUA_85_1_11) = TRUE
	OR getResult(EDLPUA_85_1_12) = TRUE
	OR getResult(EDLPUA_85_1_13) = TRUE
	OR getResult(EDLPUA_85_1_14) = TRUE
	OR getResult(EDLPUA_85_1_15) = TRUE
	OR getResult(EDLPUA_85_1_16) = TRUE
	OR getResult(EDLPUA_85_1_17) = TRUE
	OR getResult(EDLPUA_85_1_18) = TRUE
	OR getResult(EDLPUA_85_1_19) = TRUE
	OR getResult(EDLPUA_85_1_20) = TRUE
	OR getResult(EDLPUA_85_1_21) = TRUE
} 




Python Code 변환 예정



Modify
88
48911 국토의 계획 및 이용에 관한 법률 시행령 제 85조 6 항

⑥법 제78조제4항의 규정에 의하여 준주거지역·중심상업지역·일반상업지역·근린상업지역·전용공업지역·일반공업지역 또는 준공업지역안의 건축물로서 다음 각호의 1에 해당하는 건축물에 대한 용적률은 경관·교통·방화 및 위생상 지장이 없다고 인정되는 경우에는 제1항 각호의 규정에 의한 해당 용적률의 120퍼센트 이하의 범위안에서 특별시·광역시·시 또는 군의 도시계획조례가 정하는 비율로 할 수 있다. <개정 2005.9.8>





//	국토의 계획 및 이용에 관한 법률 시행령 85조 (용도지역 안에서의 용적률) 6항 
Check(EDLPUA_85_6){
	KS
}

KS{
	getResult(EDLPUA_85_6_1) = TRUE
	OR getResult(EDLPUA_85_6_2) = TRUE
	OR getResult(EDLPUA_85_6_3) = TRUE
	OR getResult(EDLPUA_85_6_4) = TRUE
} 




Python Code 변환 예정



Modify
89
19886 다중이용업소의 안전관리에 관한 특별법 시행령 제 2조 1호

1. 「식품위생법 시행령」 제21조제8호에 따른 식품접객업 중 다음 각 목의 어느 하나에 해당하는 것





//다중이용업소의 안전관리에 관한 특별법 시행령 2조 (다중이용업) 1호


Check(ERSASP_2_0_1){
IF CS THEN KS
}

CS{
getObjectProperty(Building.business) = "EDFA_21_0_8"

}
KS{
getResult(ERSASP_2_0_1_1)= TRUE
OR getResult(ERSASP_2_0_1_2)= TRUE

} 




Python Code 변환 예정



Modify
90
19888 다중이용업소의 안전관리에 관한 특별법 시행령 제 2조 3호

3. 「학원의 설립ㆍ운영 및 과외교습에 관한 법률」 제2조제1호에 따른 학원(이하 "학원"이라 한다)으로서 다음 각 목의 어느 하나에 해당하는 것





//다중이용업소의 안전관리에 관한 특별법 시행령 2조 (다중이용업) 3호


Check(ERSASP_2_0_3){
IF CS THEN KS
}

CS{
getObjectProperty(Building.business)= "AEOPE_2_0_1_"
}

KS{
getResult(ERSASP_2_0_3_가)= TRUE
OR getResult(ERSASP_2_0_3_나)= TRUE
} 




Python Code 변환 예정



Modify
91
19889 다중이용업소의 안전관리에 관한 특별법 시행령 제 2조 3호 나 목

(3) 하나의 건축물에 제1호, 제2호, 제4호부터 제7호까지, 제7호의2부터 제7호의5까지 및 제8호의 다중이용업 중 어느 하나 이상의 다중이용업과 학원이 함께 있는 경우





Check(ERSASP_2_0_3_나3){
IF CS THEN KS
}

CS{
getObjectProperty(Building.business)= "AEOPE_2_0_1"
}
KS{
getResult(ERSASP_2_0_1)= TRUE
OR getResult(ERSASP_2_0_2)= TRUE
OR getResult(ERSASP_2_0_4)= TRUE
OR getResult(ERSASP_2_0_5)= TRUE
OR getResult(ERSASP_2_0_6)= TRUE
OR getResult(ERSASP_2_0_7)= TRUE
OR getResult(ERSASP_2_0_7-2)= TRUE
OR getResult(ERSASP_2_0_7-3)= TRUE
OR getResult(ERSASP_2_0_7-4)= TRUE
OR getResult(ERSASP_2_0_7-5)= TRUE
OR getResult(ERSASP_2_0_8)= TRUE
} 




Python Code 변환 예정



Modify
92
50785 다중이용업소의 안전관리에 관한 특별법 시행령 제 2조

제2조 (다중이용업) 「다중이용업소의 안전관리에 관한 특별법」(이하 "법"이라 한다) 제2조제1항제1호에 따른 "대통령령이 정하는 영업"이라 함은 다음 각 호의 어느 하나에 해당하는 영업을 말한다. <개정 2008.12.24, 2009.7.1, 2009.8.6>





//다중이용업소의 안전관리에 관한 특별법 시행령 2조 (다중이용업)





Check(ERSASP_2){

KS

}



KS{

Building myBuilding{

getResult(ERSASP_2_1)= TRUE

OR getResult(ERSASP_2_2)= TRUE

OR getResult(ERSASP_2_3)= TRUE

OR getResult(ERSASP_2_5)= TRUE

OR getResult(ERSASP_2_6)= TRUE

OR getResult(ERSASP_2_7)= TRUE

OR getResult(ERSASP_2_7-2)= TRUE

OR getResult(ERSASP_2_7-3)= TRUE

OR getResult(ERSASP_2_7-4)= TRUE

OR getResult(ERSASP_2_7-5)= TRUE

}









} 




Python Code 변환 예정



Modify
93
67460 소방시설 설치·유지 및 안전관리에 관한 법률 제 8조 1 항

① 다음 각 호의 주택의 소유자는 소방시설 중 소화기구 및 단독경보형감지기를 설치하여야 한다.





//	소방시설 설치ㆍ유지 및 안전관리에 관한 법률 8조 (주택에 설치하는 소방시설) 1항

Check(IMSFA_8_1){

	IF CS THEN KS

}



CS{

	getResult(IMSFA_8_1_1) = TRUE

	OR getResult(IMSFA_8_1_2) = TRUE

}



KS{

Sensor mySensor{
Sensor.isSelfcontainedTypeFireAlarmDevice = TRUE
}
	isExist(mySensor) = TRUE

	OR isExist(FireExtinguisher) = TRUE

} 




Python Code 변환 예정



Modify
94
67484 소방시설 설치·유지 및 안전관리에 관한 법률 제 11조 4 항

④ 다음 각 호의 어느 하나에 해당하는 특정소방대상물 가운데 대통령령으로 정하는 특정소방대상물에는 제9조제1항에도 불구하고 대통령령으로 정하는 소방시설을 설치하지 아니할 수 있다.





//  소방시설 설치ㆍ유지 및 안전관리에 관한 법률 11조 (소방시설기준 적용의 특례) 4항
Check(IMSFA_11_4){
	IF CS THEN KS
}
CS{
	getResult(IMSFA_11_4_4) = TRUE
}
KS{
	isInstalled(FireFightingFacility) = TRUE OR FALSE
} 




Python Code 변환 예정



Modify
95
67488 소방시설 설치·유지 및 안전관리에 관한 법률 제 11조 4 항 4호

4. 「위험물 안전관리법」 제19조에 따른 자체소방대가 설치된 특정소방대상물





//  소방시설 설치ㆍ유지 및 안전관리에 관한 법률 11조 (소방시설기준 적용의 특례) 4항 4호
Check(IMSFA_11_4_4){
	KS
}

KS{
	getResult(SCHSA_19) = true
	isInstalled(FireBrigade, SpecificFireFithtingBuilding) = TRUE
} 




Python Code 변환 예정



Modify
96
69655 소방시설 설치·유지 및 안전관리에 관한 법률 시행령 제 16조

제16조(유사한 소방시설의 설치 면제의 기준) 법 제11조제2항에 따라 소방본부장 또는 소방서장은 특정소방대상물에 설치하여야 하는 소방시설 가운데 기능과 성능이 유사한 소방시설의 설치를 면제하려는 경우에는 별표 6의 기준에 따른다.





//소방시설 설치ㆍ유지 및 안전관리에 관한 법률 시행령 16조 (유사한 소방시설의 설치 면제의 기준)
Check(EDIMSFA_16){
	KS
}

KS{
	getResult(EDIMSFA_*_6) = TRUE
} 




Python Code 변환 예정



Modify
97
69667 소방시설 설치·유지 및 안전관리에 관한 법률 시행령 제 18조

제18조(소방시설을 설치하지 아니하는 특정소방대상물의 범위) 법 제11조제4항에 따라 소방시설을 설치하지 아니할 수 있는 특정소방대상물 및 소방시설의 범위는 별표 7과 같다.





//소방시설 설치ㆍ유지 및 안전관리에 관한 법률 시행령 18조 (소방시설을 설치하지 아니하는 특정소방대상물의 범위) 2항
Check(EDIMSFA_18_2){
	KS
}

KS{
	getResult(EDIMSFA_11_4) = TRUE
	getResult(EDIMSFA_*_7) = TRUE
} 




Python Code 변환 예정



Modify
98
19899 소화기구 및 자동소화장치의 화재안전기준(NFSC 101) 제 4조 1 항

제4조(설치기준) ①소화기구는 다음 각 호의 기준에 따라 설치하여야 한다.<개정 2012.6.11>





//소화기구 및 자동 소화장치의 화재안전기준(nfsc 101) 4조 (설치기준) 1항
Check(NFSC101_4_1){
    getResult(NFSC101_4_1_2)=TRUE
    getResult(NFSC101_4_1_8)=TRUE
    getResult(NFSC101_4_1_9)=TRUE
}
 




Python Code 변환 예정



Modify
99
19900 소화기구 및 자동소화장치의 화재안전기준(NFSC 101) 제 4조 1 항 1호

1. 특정소방대상물의 설치장소에 따라 별표 1에 적합한 종류의 것으로 할 것<개정 2012.6.11>





//소화기구 및 자동 소화장치의 화재안전기준(nfsc 101) 4조 (설치기준) 1항 1호
Check(NFSC101_4_1_1){
	getResult(NFSC101_*_1) = TRUE
} 




Python Code 변환 예정



Modify
100
19901 소화기구 및 자동소화장치의 화재안전기준(NFSC 101) 제 4조 1 항 2호

2. 특정소방대상물에 따라 소화기구의 능력단위는 별표 3의 기준에 따를 것<개정 2012.6.11>





//소화기구 및 자동 소화장치의 화재안전기준(nfsc 101) 4조 (설치기준) 1항 2호
Check(NFSC101_4_1_2){
    getResult(NFSC101_*_3)=TRUE
} 




Python Code 변환 예정



Modify
  ◁prev 1   2   3   4   5   next▷  
 

Related Sites

국토부 BIM과제-1st  |   Ministry of Land, Infrasrtucture and Transport   |   Korea Agency for Infrastructure Technology Advancement  |   Space and Design IT Lab   |   Yonsei University
This is Design IT Lab server's restricted area. Authorized users could access this website.