설계품질검토 대상법규   |   조항단위 법규   |   문장단위 법규   |   KBimCode-Assess 연동모듈   |   KBimCode DB   |   주어부 - 객체,속성 DB   |   서술부 - 함수 DB   |   관계부 - 문장관계   |   룰셋생성모듈   |  
(2025-06-28 기준) 설계품질검토용 건축법 및 관련법규 - KBIMCode (문장단위)
      KBIMCode - KBimAssess Python Code     KBIMCode - 체크리스트 단위     KBIMCode - 조항단위
  ◁prev 1   2      
2 / 2 page Total 2500 / 4000 records
Select
ALL
None
#
Law
Jo
JO Name
HANG
HO
MOK
Text
Search!
1
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 13조 3 항 2호

2. 특별피난계단 또는 피난계단과 연결되도록 할 것





//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 2호



Check(REFB_13_3_2){

     KS

}



KS{



   Stair myStair {

    isObjectProperty(Stair.isEscape)=True   

   }



   Stair myStair2 {

    isObjectProperty(Stair.isSpecialEscape)=True   

   }

Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}

   isConnected(mySpace, myStair )=True 

   OR isConnected(mySpace, myStair2 )=True 

} 




Python Code 변환 예정



2
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 13조 3 항 3호

3. 출입구·창문을 제외한 부분은 해당 건축물의 다른 부분과 내화구조의 바닥 및 벽으로 구획할 것





// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 3호



Check(REFB_13_3_3){

     KS

}







KS{ 

Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}

   isFirePartition(mySpace)=True

} 




Python Code 변환 예정



3
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 13조 3 항 5호

5. 내부마감재료는 불연재료로 할 것





// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 5호



Check(REFB_13_3_5){

       KS

}





KS{

Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}

   isObjectProperty(mySpace.InteriorFinish.Material.nonCombustibility)=True

} 




Python Code 변환 예정



4
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 13조 3 항 7호

7. 관리사무소 등과 긴급 연락이 가능한 통신시설을 설치할 것





// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 7호

check(REFB_13_3_7){

     KS

}

KS{

	Space mySpace{

	isObjectProperty(Space.isEscape) = TRUE

	}

	hasObject(mySpace, WarningAndCommunicationFacility) = TRUE

} 




Python Code 변환 예정



5
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 24조의2조 1 항

①영 제61조제1항제4호가목 및 제2항제1호나목에서 "국토교통부령으로 정하는 화재위험이 적은 공장"이란 각각 별표 3의 업종에 해당하는 공장을 말한다. 다만, 공장의 일부 또는 전체를 기숙사 및 구내식당의 용도로 사용하는 건축물을 제외한다. <개정 2008.3.14, 2010.12.30, 2012.1.6, 2013.3.23>





// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 24조의2 (소규모 공장용도 건축물의 마감재료) 1항

check(REFB_24-2_1){

      KS

}

KS{

	getResult(REFB_*_3) = TRUE

	(getBuildingUsage() != "Dormitory"

	OR getBuildingUsage() != "Cafeteria"

	OR getSpaceUsage() != "Dormitory"

	OR getSpaceUsage() != "Cafeteria")

} 




Python Code 변환 예정



6
건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 제 15조의2조 2 항

②문화 및 집회시설(공연장ㆍ집회장ㆍ관람장ㆍ전시장에 한한다), 종교시설 중 종교집회장, 노유자시설 중 아동 관련 시설ㆍ노인복지시설, 수련시설 중 생활권수련시설, 위락시설 중 유흥주점 및 장례식장의 관람석 또는 집회실과 접하는 복도의 유효너비는 제1항의 규정에 불구하고 다음 각 호에서 정하는 너비로 하여야 한다. <개정 2010.4.7>





//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조의2 (복도의 너비 및 설치기준) 2항

check(REFB_15-2_2){

     IF CS THEN KS 

}



CS{

Space  mySpace{

getSpaceUsage(Space) = “AssemblyHall”

OR getSpaceUsage(Space) = “PerformanceHall”

}

    Corridor myCorridor{

       isAdjacent(mySpace,Corridor) = TRUE

    }



    (getBuildingUsage()="CulturalAndAssemblyFacility.PerformanceHall"

    OR getBuildingUsage()="CulturalAndAssemblyFacility.AssemblyHall"

    OR getBuildingUsage()="CulturalAndAssemblyFacility.Auditorium"

    OR getBuildingUsage()="CulturalAndAssemblyFacility.ExhibitionHall"

    OR getBuildingUsage()="ReligiousFacility.ReligiousAssemblyFacility"

    OR getBuildingUsage()="FacilitiesForTheAgedAndChildren.ChildrenRelatedFacility"

    OR getBuildingUsage()="FacilitiesForTheAgedAndChildren.WelfareFacilityForTheAged"

    OR getBuildingUsage()="Trainingfacility.TrainingFacilitiesInLiving "

    OR getBuildingUsage()="AmusementFacility.tavern"

    OR getBuildingUsage()="AmusementFacility.FuneralParlors" )

     

    isExist(myCorridor)=TRUE   

}



KS{



 

   getResult(REFB_15-2_2_1)=TRUE

   getResult(REFB_15-2_2_2)=TRUE

   getResult(REFB_15-2_2_3)=TRUE

} 








corridor_code = '33105'
std_floor_area = 200

corridor_code_label = '복도 공간분류코드'
std_floor_area_label = '기준 연면적'

def Check():
    for building in SELECT('building'):
        if building.SELECT('prop', '연면적').NUMBER() <= std_floor_area:
            continue

        bldg_use = building.SELECT('building type').STRING()
        sub_use = building.SELECT('prop', '세부용도').STRING()
        if not ((bldg_use == '문화 및 집회시설' and sub_use in ['공연장' ,'집회장', '관람장', '전시장'])
            or (bldg_use == '종교시설' and sub_use == '종교집회장')
            or (bldg_use == '노유자시설' and sub_use in ['아동관련시설' ,'노인복지시설'])
            or (bldg_use == '수련시설' and sub_use == '생활권수련시설')
            or (bldg_use == '위락시설' and sub_use == '유흥주점')
            or (bldg_use == '장례시설' and sub_use == '장례식장')):
            continue

        for storey in building.SELECT('storey'):
            area = 0.0
            corridors = []
            for space in storey.SELECT('space'):
                if space.SELECT('class code').STRING() == corridor_code:
                    corridors.append(space)
                
                area += space.SELECT('area').UNIT('m2').NUMBER()
            
            min_cor_w = 1.8
            if area < 500:
                min_cor_w = 1.5
            elif area >= 1000:
                min_cor_w = 2.4

            for space in corridors:    
                width = space.SELECT('min clear width').UNIT('m')
                w = width.NUMBER()

                if w < min_cor_w:
                    width.ERROR('유효너비: ' + str(w) + ' < ' + str(min_cor_w))
                else:
                    width.SUCCESS('유효너비: ' + str(w) + ' >= ' + str(min_cor_w)) 





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



8
건축법 시행령 제 38조 1호

1. 제2종 근린생활시설 중 공연장ㆍ종교집회장(해당 용도로 쓰는 바닥면적의 합계가 각각 300제곱미터 이상인 경우만 해당한다)





//건축법 시행령 38조(관람석 등으로부터의 출구 설치) 1호
Check(EDBA_38_0_1){
     (getBuildingUsage() = "ClassIINeighborhoodLivingFacility.performancehall"
     OR getBuildingUsage() = "ClassIINeighborhoodLivingFacility.ReligiousAssemblyFacility")

     Space mySpace {
          getSpaceUsage(Space) = "ClassIINeighborhoodLivingFacility.performancehall"
          OR getSpaceUsage(Space) = "ClassIINeighborhoodLivingFacility.ReligiousAssemblyFacility"
     }

     getTotalFloorArea(mySpace) > 300
}

 








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) + '㎡)') 





9
건축법 시행령 제 52조 2호

2. 제1종 근린생활시설 중 목욕장의 욕실과 휴게음식점 및 제과점의 조리장





//건축법 시행령 52조 (거실 등의 방습) 2호

Check(EDBA_52_0_2){

KS

}



KS{

Building myBuilding1{
Building.usage = "ClassiNeighborhoodLivingFacilites.BathHouse"
}
Building myBuilding2{
Building.usage = "ClassiNeighborhoodLivingFacilites" OR "RestingRestaurant"
}

getSpaceUsage(myBuilding1.Space)="BathRoom"

getSpaceUsage(myBuilding2.Space)="Kitchen"

} 




Python Code 변환 예정



10
건축법 시행령 제 52조 3호

3. 제2종 근린생활시설 중 일반음식점, 휴게음식점 및 제과점의 조리장과 숙박시설의 욕실





//건축법 시행령 52조 (거실 등의 방습) 3호

Check(EDBA_52_0_3){

KS

}



KS{

Building myBuilding1{
Building.usage = "ClassiiNeighborhoodLivingFacilites.Restaurant" OR "ClassiiNeighborhoodLivingFacilites.RestingRestaurant" OR "ClassiiNeighborhoodLivingFacilites.Bakery"
}
Building myBuilding2{
Building.usage = "ClassiiNeighborhoodLivingFacilites.LodgingFacility" 
}

getSpaceUsage(myBuilding1.Space)="Kitchen"

getSpaceUsage(myBuilding2.Space)="BathRoom"


} 




Python Code 변환 예정



11
건축법 시행령 제 53조 1 항 2호

2. 공동주택 중 기숙사의 침실, 의료시설의 병실, 교육연구시설 중 학교의 교실 또는 숙박시설의 객실 간 경계벽





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



check(EDBA_53_1_1){

	KS

}

KS{


Space mySpace1{

Space.Building.usage = “MultiUnitHouse.Dormitory”

Space.name = “BedRoom”

}



Space mySpace1_1{

Space.Building.usage = “MultiUnitHouse.Dormitory”

Space.name != “BedRoom”

}



Space mySpace2{

Space.Building.usage = “MedicalFacility”

Space.name = “Ward”

}



Space mySpace2_1{

Space.Building.usage = “MedicalFacility”

Space.name != “Ward”

}



Space mySpace3{

Space.Building.usage = “EducationAndResearchFacility.School”

Space.name = “ClassRoom”

}

Space mySpace3_1{

Space.Building.usage = “EducationAndResearchFacility.School”

Space.name != “ClassRoom”

}



Space mySpace4{

Space.Building.usage = “LodgingFacility”

Space.name = “GuestRoom”

}

Space mySpace4_1

Space.Building.usage = “LodgingFacility”

Space.name != “GuestRoom”

}



Wall myWall1{

isObjectProperty(Wall.isPartitionWall)=TRUE

hasObject(mySpace1, Wall) =TRUE

}



Wall myWall2{

isObjectProperty(Wall.isPartitionWall)=TRUE

hasObject(mySpace2, Wall) =TRUE

}



Wall myWall3{

isObjectProperty(Wall.isPartitionWall)=TRUE

hasObject(mySpace3, Wall) =TRUE

}



Wall myWall4{

isObjectProperty(Wall.isPartitionWall)=TRUE

hasObject(mySpace4, Wall) =TRUE

}



(hasObject(mySpace1, myWall) =TRUE

hasObject(mySpace1_1, myWall) =FALSE)

OR

(hasObject(mySpace2, myWall) =TRUE

hasObject(mySpace2_1, myWall) =FALSE)

OR

(hasObject(mySpace3, myWall) =TRUE

hasObject(mySpace3_1, myWall) =FALSE)

OR

(hasObject(mySpace4, myWall) =TRUE

hasObject(mySpace4_1, myWall) =FALSE)



} 




Python Code 변환 예정



12
건축법 시행령 제 53조 1 항 3호

3. 제2종 근린생활시설 중 다중생활시설의 호실 간 경계벽





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



check(EDBA_53_1_3){

	KS

}


KS{

Space mySpace1{

Space.Building.usage = “ClassIINeighborhoodLivingFacility.CommunalLivingFacility”

}



Wall myWall{

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



isObjectProperty(myWall.isSharedByHouseholds) = TRUE


} 




Python Code 변환 예정



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



14
건축법 시행령 제 51조 2 항 1호 가 목

가. 제2종 근린생활시설 중 공연장, 종교집회장, 인터넷컴퓨터게임시설제공업소 및 다중생활시설(공연장, 종교집회장 및 인터넷컴퓨터게임시설제공업소는 해당 용도로 쓰는 바닥면적의 합계가 각각 300제곱미터 이상인 경우만 해당한다)





//건축법 시행령 51조 (거실의 채광 등) 2항 1호
Check(EDBA_51_2_1){
	KS1 OR KS2
}	
KS1{
	Space mySpace{
		getBuildingUsage() = "ClassIINeighborhoodLivingFacility.PerformanceHall"
		OR getBuildingUsage() = "ClassIINeighborhoodLivingFacility.ReligiousAssemblyFacility"
		OR getBuildingUsage() = "ClassIINeighborhoodLivingFacility.FacilityForProvidingInternetComputerGameService"	
	}

	getFloorArea(mySpace) >= 300 m2
}

KS2{
	getBuildingUsage() = "ClassIINeighborhoodLivingFacility.CommunalLivingFacilities"
}
 




Python Code 변환 예정



15
건축법 시행령 제 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)) 





16
건축법 시행령 제 46조 4 항 1호

1. 대피공간은 바깥의 공기와 접할 것





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

check(EDBA_46_4_1){

KS

}



KS{
Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}
isConnectedToExternal(mySpace)=TRUE

} 




Python Code 변환 예정



17
건축법 시행령 제 46조 4 항 2호

2. 대피공간은 실내의 다른 부분과 방화구획으로 구획될 것





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

check(EDBA_46_4_2){

KS

}



KS{
Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}
isObjectProperty(mySpace.isFirePartition)=TRUE

} 




Python Code 변환 예정



18
건축법 시행령 제 37조

제37조 (지하층과 피난층 사이의 개방공간 설치) 바닥면적의 합계가 3천 제곱미터 이상인 공연장·집회장·관람장 또는 전시장을 지하층에 설치하는 경우에는 각 실에 있는 자가 지하층 각 층에서 건축물 밖으로 피난하여 옥외 계단 또는 경사로 등을 이용하여 피난층으로 대피할 수 있도록 천장이 개방된 외부 공간을 설치하여야 한다.





Check(EDBA_37){

  IF (CS) THEN KS END IF

  Space mySpace{

        Space.Floor.area > 3000 M2;

        Space.usage="PerformanceHall"

        OR Space.usage="AssemblyHall"

        OR Space.usage="Auditorium"

        OR Space.usage="ExhibitionHall"

  }

}



CS{

    

    mySpace.Floor.number< 0 

    

}



KS{

Stair myStair{
Stair.isOutdoor = TRUE
}
Floor myFloor{
Floor.isEscape = TRUE
}
Space mySpace{
hasObject(Space, Ceiling) != TRUE
}
     (isGoThrough(mySpace, myStair, myFloor)=True

     OR isGoThrough(mySpace, Ramp, myFloor)=True)

     AND isExternal(mySpace)=True

    

} 








std_area = 3000
std_area_label = '기준 바닥면적 합계'

def Check():
    for building in SELECT('building'):
        bldg_use = building.SELECT('building type').STRING()
        sub_use = building.SELECT('prop', '세부용도').STRING()
        if not (bldg_use == '문화 및 집회시설' and sub_use in ['공연장', '집회장', '관람장', '전시장']):
            continue

        base_storey_exist = False
        under_stories = []

        for storey in building.SELECT('storey'):
            if storey.SELECT('prop', '기준 지상층').BOOL():
                base_storey_exist = True
                break
            under_stories.append(storey)

        if base_storey_exist == False:
            building.ERROR('지상층이 존재하지 않습니다.')
            continue

        if len(under_stories) == 0:
            continue

        area_sum = 0.0
        ex_spaces = []

        for storey in under_stories:
            for space in storey.SELECT('space'):
                area_sum += space.SELECT('area').UNIT('m2').NUMBER()
                if space.SELECT('is external').BOOL():
                    ex_spaces.append(space)

        if area_sum < std_area:
            building.SUCCESS('지하공간 바닥면적 합: ' + str(area_sum) + ' < ' + str(std_area))
            continue

        if len(ex_spaces) == 0:
            building.ERROR('지하에 천장이 개방된 외부 공간이 없습니다.')
            continue

        for space in ex_spaces:
            for stair in space.SELECT('stair'):
                if stair.SELECT('is direct').BOOL():
                    space.SUCCESS('피난층으로 대피할 수 있는 외부 공간이 존재합니다.')
                    return

        ex_spaces[0].ERROR('피난층으로 대피할 수 없습니다.') 





19
건축법 시행령 제 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) + '㎡)') 





20
건축법 시행령 제 39조 1 항 1호

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





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

Check(EDBA_39_1_1){     
KS}

KS {

Building myBuilding{
getBuildingUsage() = “PerformanceHall”
OR getBuildingUsage() = “ReligiousAssemblyFacility ”
OR getBuildingUsage() = “FacilityForProvidingInternetComputerGameService”
}

Space mySpace{
Space.usage = “PerformanceHall”
OR Space.usage = “ReligiousAssemblyFacility ”
OR Space.usage = “FacilityForProvidingInternetComputerGameService”
}

IF isExist(myBuilding) THEN mySpace.FloorSlab.area >= 300 m2

}
 








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





21
건축법 시행령 제 40조 1 항

① 옥상광장 또는 2층 이상인 층에 있는 노대(露臺)나 그 밖에 이와 비슷한 것의 주위에는 높이 1.2미터 이상의 난간을 설치하여야 한다. 다만, 그 노대 등에 출입할 수 없는 구조인 경우에는 그러하지 아니하다.





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

check(EDBA_40_1){

	IF (CS) THEN KS

}



CS{

	Space myBalcony {

		getSpace(“Balconly”)

		Space.Floor.number >= 2

	}



	Space mySpace{

		getSpace(“RoofTopPlaza”) + getSpace(myBalcony)

	}



	isAccessible(mySpace) = TRUE

}



KS{

	hasElement(mySpace, Railing) = TRUE

	mySpace.Rail.height >= 1.2m

} 








target_space_names = ['옥상광장', '노대']
drop_h = 2.0
barrier_h = 1.2

target_space_names_label = '대상 공간 이름'
drop_h_label = '최소 추락 높이'
barrier_h_label = '최소 난간 높이'

def Check():
    for space in SELECT('space'):
        if space.SELECT('is name in', target_space_names).BOOL() == False:
            continue
        if space.SELECT('space door').COUNT() + space.SELECT('opening').COUNT() == 0:
            space.SUCCESS('출입 불가능')
            continue

        for edge in space.SELECT('edge'):
            drop = edge.SELECT('drop').UNIT('m')
            if drop.COUNT() == 0 or drop.LTE(drop_h): 
                continue

            safetybarrier = edge.SELECT('safety barrier')   
            if safetybarrier.COUNT() == 0 : 
                drop.ERROR('난간 미설치')
                continue
                    
            height = safetybarrier.SELECT('height').UNIT('m')
            height_val = height.NUMBER()
                
            if height_val < barrier_h:
                height.ERROR('난간 높이: ' +  str(height_val) + ' < ' + str(barrier_h))
            else:
                height.SUCCESS('난간 높이: ' +  str(height_val) + ' >= ' + str(barrier_h)) 





22
건축법 시행령 제 46조 2 항 3호

3. 계단실부분·복도 또는 승강기의 승강로 부분(해당 승강기의 승강을 위한 승강로비 부분을 포함한다)으로서 그 건축물의 다른 부분과 방화구획으로 구획된 부분





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

check(EDBA_46_2_3){

KS

}



KS{

 isObjectProperty(Stair.Space.isFirePartition)=TRUE

 OR isObjectProperty(Passage.isFirePartition)=TRUE

 OR isObjectProperty(ElevatorShaft.isFirePartition)=TRUE

} 




Python Code 변환 예정



23
건축법 시행령 제 46조 2 항 4호

4. 건축물의 최상층 또는 피난층으로서 대규모 회의장·강당·스카이라운지·로비 등의 용도로 쓰는 부분으로서 그 용도로 사용하기 위하여 불가피한 부분





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

check(EDBA_46_2_4){

KS

}



KS{
Floor myFloor{
getObject(TopFloor)
OR  isObjectProperty(Floor.isEscape)=TRUE
}


 AND 

 (getSpaceUsage(myFloor.Space)="ConferenceRoom"

 OR getSpaceUsage(myFloor.Space)="Hall"

 OR getSpaceUsage(myFloor.Space)="SkyLounge"

 OR getSpaceUsage(myFloor.Space)="Lobby"

 OR isObjectProperty(Zone.isEgressSafetyZone)= TRUE

} 




Python Code 변환 예정



24
건축법 시행령 제 46조 2 항 5호

5. 복층형 공동주택의 세대별 층간 바닥 부분





//건축법 시행령 46조 (방화구획의 설치) 2항 5호
check(EDBA_46_2_5){
	Zone myZone{
		isObjectProperty(Zone.isOccupiedByOneHousehold) = TRUE
	}
	getBuildingUsage() = "DuplexMultiUnitHouses"
	hasSpace(myZone, Floor) = TRUE
	getFloorNumber(Floor) != 1
} 




Python Code 변환 예정



25
건축법 시행령 제 46조 2 항 6호

6. 주요구조부가 내화구조 또는 불연재료로 된 주차장





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

check(EDBA_46_2_6){

KS

}



KS{

  isObjectProperty(MainStructuralPart.isFireResistantStructure)=TRUE

  AND isObjectProperty(MainStructuralPart.Material.nonCombustibility)=TRUE

  AND getSpaceUsage()=ParkingLot

} 




Python Code 변환 예정



26
건축법 시행령 제 46조 2 항 7호

7. 단독주택, 동물 및 식물 관련 시설 또는 교정 및 군사시설 중 군사시설(집회, 체육, 창고 등의 용도로 사용되는 시설만 해당한다)로 쓰는 건축물





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

check(EDBA_46_2_7){

KS

}



KS{

getBuildingUsage()="DetachedHouses"

OR getBuildingUsage()="FacilitiesForAnimalsAndPlants"

OR (getBuildingUsage()="CorrectionalFacilityANDMilitaryFacilities" and (getSpaceUsage()= "Assembly" OR "Gymnasium" OR "Warehouses")

} 




Python Code 변환 예정



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



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



29
건축법 시행령 제 47조 1 항 1호

1. 공동주택(기숙사만 해당한다)과 공장이 같은 건축물에 있는 경우





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

Check(EDBA_47_1_1){
       KS
}

KS{
     Space mySpace1{
         getSpaceUsage(Space)="MultiUnitHouse.Dormitory"
     }
 
     Space mySpace2{
         getSpaceUsage(Space)="Factory"
     }


    isExistTogether(mySpace1, mySpace2)=True
       
} 




Python Code 변환 예정



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



31
건축법 시행령 제 56조 1 항 1호

1. 문화 및 집회시설(전시장 및 동·식물원은 제외한다), 종교시설, 위락시설 중 주점영업 및 장례식장의 용도로 쓰는 건축물로서 관람석 또는 집회실의 바닥면적의 합계가 200제곱미터(옥외관람석의 경우에는 1천 제곱미터) 이상인 건축물





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

check(EDBA_56_1_1){

	KS

}


Space mySpace{
Space.usage = "Auditorium "
isExternal(Space) = TRUE
}



KS {

        (getBuildingUsage() = "PerformanceHall" | "ReligiousAssemblyFacility"

        AND getFloorArea(getSpace("PerformanceHall" | “ReligiousAssemblyFacility”)) > = 300m2;)

	

        OR (getBuildingUsage() = "CulturalAndAssemblyFacility" 

        AND getBuildingUsage() != "ExhibitionHall" | "ZoologicalAndBotanicalGarden"

        

        OR (getBuildingUsage() = "ReligiousFacility" | "BarBusiness" | "FuneralParlor"

	AND getFloorArea(getSpace(“Seat” | “AssemblyHall”) > = 200m2 

        OR getFloorArea(mySpace) > = 1000m2;)

} 




Python Code 변환 예정



32
건축법 시행령 제 56조 1 항 2호

2. 문화 및 집회시설 중 전시장 또는 동·식물원, 판매시설, 운수시설, 수련시설, 운동시설 중 체육관·운동장, 위락시설(주점영업의 용도로 쓰는 것은 제외한다), 창고시설, 위험물저장 및 처리시설, 자동차 관련 시설, 방송통신시설 중 방송국·전신전화국·촬영소, 묘지 관련 시설 중 화장장 또는 관광휴게시설의 용도로 쓰는 건축물로서 그 용도로 쓰는 바닥면적의 합계가 500제곱미터 이상인 건축물





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

check(EDBA_56_1_2){

        KS

}

	

KS{

        (getBuildingUsage() = "ExhibitionHall" |  "ZoologicalANDbotanicalGarden" | "CommercialFacility"  | "TransportationFacilities"  | "gymnasium.educationAndresearchFacilities"   | "hall.educationAndresearchFacilities" | "gymnasium" | "sportsfacilities.stadium" | "sports facilities.warehouses"  | "factory.facilitiesForStorageAndreatmentOfDangerousSubstance"  | "factory.facilitiesForMotorVehicles" | "facilitiesforbroadcastingAndTelecommunications.broadcastingStation"  | "facilitiesforbroadcasting andtelecommunications.telegraphAndTelephoneStations" | "facilitiesforbroadcasting and telecommunications.studio" | "cemeteries and relatedfacilities.Crematorium | "facilitiesfortourismandrelaxation"

OR (getBuildingUsage() = "amusementfacilities"

AND getBuildingUsage() != "barbusiness.amusementfacilities"))

AND getFloorArea(getSpace(getBuildingUsage()) > = 500m2))

} 




Python Code 변환 예정



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



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



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



36
건축법 시행령 제 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)) 





37
건축법 시행령 제 34조 2 항 1호

1. 문화 및 집회시설(전시장 및 동·식물원은 제외한다), 종교시설, 위락시설 중 주점영업 또는 장례식장의 용도로 쓰는 층으로서 그 층에서 해당 용도로 쓰는 바닥면적의 합계가 200제곱미터 이상인 것





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

Check(EDBA_34_2_1){

KS

}

KS{

Floor myFloor1{

       getObjectUsage(Floor) ="ClassIINeighborhoodLivingFacility.PerformanceHall"

       OR  getObjectUsage(Floor)="ClassIINeighborhoodLivingFacility.ReligiousAssemblyFacility"

}



Floor myFloor2 {

       getObjectUsage(Floor)="CulturalAndAssemblyFacility"

       getObjectUsage(Floor) != "CulturalAndAssemblyFacility.ExhibitionHall"		

       getObjectUsage(Floor) != "CulturalAndAssemblyFacility.ZoologicalAndBotanicalGarden“

		

       getObjectUsage(Floor) = "ReligiousFacility"

       getObjectUsage(Floor) = “AmusementFacility.BarBusiness"

       getObjectUsage(Floor) = “AmusementFacility.FuneralParlors“

}



	 getTotalFloorArea(myFloor1.Space)>=300 m2

         OR getTotalFloorArea(myFloor2.Space)>=200 m2

        

} 




Python Code 변환 예정



38
건축법 시행령 제 34조 2 항 2호

2. 단독주택 중 다중주택·다가구주택, 제2종 근린생활시설 중 학원·독서실, 판매시설, 운수시설(여객용 시설만 해당한다), 의료시설(입원실이 없는 치과병원은 제외한다), 교육연구시설 중 학원, 노유자시설 중 아동 관련 시설·노인복지시설, 수련시설 중 유스호스텔, 숙박시설 또는 장례식장의 용도로 쓰는 3층 이상의 층으로서 그 층의 해당 용도로 쓰는 거실의 바닥면적의 합계가 200제곱미터 이상인 것





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

Check(EDBA_34_2_2){



        Building myBuilding{

              getBuildingUsage()="DentalClinic"

        }


Space mySpace{
getSpaceUsage() = "Ward"
}
	Floor myFloor1 {

		getObjectProperty(Floor.number)>=3

                getObjectUsage(Floor)  = “DetachedHouse.MultiUserHouse”

		OR getObjectUsage(Floor)  = “DetachedHouse.MultiFamilyHouse”

		OR getObjectUsage(Floor)  = “ClassIINeighborhoodLivingFacility.EducationalInstitute”

		OR getObjectUsage(Floor)  = “ClassIINeighborhoodLivingFacility.ReadingRooms” 

                OR getObjectUsage(Floor)  = “CommercialFacility”

                OR getObjectUsage(Floor)  = “TransportationFacility.PassengerTrafficFacilities”

                OR ( getObjectUsage(Floor)  = “MedicalFacility” ADN hasObject(myBuilding, mySpace)=TRUE )

                OR getObjectUsage(Floor)  = “EducationAndResearchFacility.EducationalInstitutes” 

		OR getObjectUsage(Floor)  = “FacilitiesForTheAgedAndChildren.ChildrenRelatedFacilities” 

		OR getObjectUsage(Floor)  = “EducationAndResearchFacility.WelfareFacilityForTheAged” 

		OR getObjectUsage(Floor)  = “Trainingfacility.YouthHostel” 

		OR getObjectUsage(Floor)  = “LodgingFacility”

                

	}



	Floor myFloor2{

		 getObjectUsage(Floor)  = “ClassIINeighborhoodLivingFacility.FacilityForProvidingInternetComputerGameService”

		}



           getTotalFloorArea(myFloor1.Room)>= 200 m2

          OR getTotalFloorArea(myFloor2.Room)>= 300 m2	

} 




Python Code 변환 예정



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



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



41
건축법 시행령 제 47조 1 항 3호

3. 공동주택과 위락시설이 같은 초고층 건축물에 있는 경우. 다만, 사생활을 보호하고 방범·방화 등 주거 안전을 보장하며 소음·악취 등으로부터 주거환경을 보호할 수 있도록 주택의 출입구·계단 및 승강기 등을 주택 외의 시설과 분리된 구조로 하여야 한다.





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

Check(EDBA_47_1_3){
         KS
}

KS{
    Space mySpace1{
        getSpaceUsage(Space)="MultiUnitHouse"
    }
 
    Space mySpace2{
        getSpaceUsage(Space)="AmusementFacility"
    }

  
    Building myBuilding{
       isObjectProperty(Building.isHighriseBuilding)=True
    }

   
    isExistTogether(mySpace1, mySpace2, myBuilding)=True

   //다만, 주택의 출입구ㆍ계단 및 승강기 등을 주택 외의 시설과 분리된 구조로 하여야 한다.

} 




Python Code 변환 예정



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



43
다중이용업소의 안전관리에 관한 특별법 시행령 제 2조 5호

5. 「게임산업진흥에 관한 법률」 제2조제6호ㆍ제6호의2ㆍ제7호 및 제8호의 게임제공업ㆍ인터넷컴퓨터게임시설제공업 및 복합유통게임제공업. 다만, 게임제공업 및 인터넷컴퓨터게임시설제공업의 경우에는 영업장(내부계단으로 연결된 복층구조의 영업장은 제외한다)이 지상 1층 또는 지상과 직접 접하는 층에 설치되고 그 영업장의 주된 출입구가 건축물 외부의 지면과 직접 연결된 구조에 해당하는 경우는 제외한다.





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


Check(ERSASP_2_0_5){
KS1 AND IF CS THEN !KS2
}


KS1{
getObjectProperty(Building.business)= "GIPA_2_0_6"
OR getObjectProperty(Building.business)= "GIPA_2_0_6-2"
OR getObjectProperty(Building.business)= "GIPA_2_0_7"
OR getObjectProperty(Building.business)= "GIPA_2_0_8"
}


CS{
getObjectProperty(Building.business)= "GIPA_2_0_6"
OR getObjectProperty(Building.business)= "GIPA_2_0_7"
}

KS2{
Space mySpace{
Space.usage = "GIPA_2_0_6"
OR Space.usage = "GIPA_2_0_7"
}
Floor myFloor{
hasObject(Floor,mySpace)=TRUE
}
Door myDoor{
isObjectProperty(mySpace.Door.isEntrance)=TRUE
}

(getObjectProperty(myFloor.number)=1
OR isDirectlyAccessible(myFloor, Ground)=TRUE)
isConnectedToExternal(myDoor)=TRUE
} 




Python Code 변환 예정



44
소화기구 및 자동소화장치의 화재안전기준(NFSC 101) 제 4조 7호

7. 주방용자동소화장치는 아파트의 각 세대별 주방 및 오피스텔의 각실 별 주방에 다음 각 목의 기준에 따라 설치할 것<개정 2012.6.11>





//소화기구 및 자동 소화장치의 화재안전기준(nfsc 101) 4조 (설치기준) 1항 7호
Check(NFSC101_4_1_7){
	IF CS THEN KS
}

CS{
	Space mySpace{
	getSpaceUsage() = "Kitchen"
	}

}

KS{
	AutomaticFireExtinguishingEquipment myAutomaticFireExtinguishingEquipment{
	isObjectProperty(AutomaticFireExtinguishingEquipment.isKitchenType) = TRUE
	}
	hasSpace(mySpace,myAutomaticFireExtinguishingEquipment) = TRUE
	getResult(NFSC101_4_1_7_3)=TRUE
} 




Python Code 변환 예정



45
소화기구 및 자동소화장치의 화재안전기준(NFSC 101) 제 4조 7호 다 목

다. 가스차단장치는 주방배관의 개폐밸브로부터 2m 이하의 위치에 설치하되, 상시 확인 및 점검이 가능하도록 설치할 것<개정 2012.6.11>





//소화기구 및 자동 소화장치의 화재안전기준(nfsc 101) 4조 (설치기준) 1항 7호 다목
Check(NFSC101_4_1_7_다){
	KS
}
KS{
	ShutdownEquipment myShutdownEquipment{
	isObjectProperty(ShutdownEquipment.type)="GAS"
	}
	Space mySpace{
	isObjectProperty(Space.usage) = "Kitchen"
	}
	Pipe myPipe{
	isInstalled(Pipe, mySpace) = TRUE
	}
	Valve myValve{
	isObjectProperty(Valve.isShutoffValve) = TRUE
	isInstalled(Valve, myPipe) = TRUE
	}
	isElementDistance(myShutdownEquipment, myValve) <= 2m
} 




Python Code 변환 예정



46
소화기구 및 자동소화장치의 화재안전기준(NFSC 101) 제 4조 2 항

② 이산화탄소 또는 할로겐화합물(할론 1301과 청정소화약제를 제외한다)을 방사하는 소화기구(자동확산소화장치를 제외한다)는 지하층이나 무창층 또는 밀폐된 거실로서 그 바닥면적이 20㎡ 미만의 장소에는 설치할 수 없다. 다만, 배기를 위한 유효한 개구부가 있는 장소인 경우에는 그러하지 아니하다.<개정 2008.12.15, 2012.6.11>





//소화기구 및 자동 소화장치의 화재안전기준(nfsc 101) 4조 (설치기준) 2항

Check(NFSC101_4_2){

	KS

}



KS{

	FireExtinguisher myFireExtinguisher{

	getObjectProperty(FireExtinguishingEquipment.extinguishingAgentType) = "GasType"

	}

	Space mySpace{

		(getFloorNumber(Space) = -1

	OR hasSpace(Space, Window) = FALSE

	OR isObjectProperty(Room.isEnclosed)=TRUE)

	getObjectProperty(Space.FloorSlab) < 20 m2

	}



	getSpace(mySpace, myFireExtinguisher) = FALSE

} 




Python Code 변환 예정



47
연결살수설비의 화재안전기준(NFSC 503) 제 6조 4 항

④가연성 가스의 저장·취급시설에 설치하는 연결살수설비의 헤드는 다음 각 호의 기준에 따라 설치하여야 한다. 다만, 지하에 설치된 가연성가스의 저장·취급시설로서 지상에 노출된 부분이 없는 경우에는 그러하지 아니하다. <개정 2012.8.20>





//연결살수설비의 화재안전기준(nfsc 503) 6조 (연결살수설비의 헤드) 4항
Check(NFSC503_6_4){
	IF !(CS) THEN KS
}

CS{
	getFloorElevationHeight(?) = A
	getSpaceHeight(?) = B
	A + B <= 0
}

KS{
	hasSpace(?, HookingUpSprinklerSystem.Head) = TRUE
	getResult(NFSC503_6_4_1) = TRUE
	getResult(NFSC503_6_4_2) = TRUE
} 




Python Code 변환 예정



48
연결송수관설비의 화재안전기준(NFSC 502) 제 4조 4호

4. 송수구로부터 연결송수관설비의 주배관에 이르는 연결배관에 개폐밸브를 설치한 때에는 그 개폐상태를 쉽게 확인 및 조작할 수 있는 옥외 또는 기계실 등의 장소에 설치할 것. 이 경우 개폐밸브에는 그 밸브의 개폐상태를 감시제어반에서 확인할 수 있도록 급수개폐밸브 작동표시 스위치를 다음 각 목의 기준에 따라 설치하여야 한다. <개정 2014.8.18>





//연결송수관설비의 화재안전기준(NFSC 502) 4조 (송수구) 4호



Check(NFSC502_4_0_4){

      IF CS THEN KS 

}



CS{

    Pipe  myPipe1{
Pipe.systemType = "FireDepartmentConnectionSystem"
Pipe.isRiser = TRUE
}

    Pipe  myPipe2{

         isConnectedTo(FireDepartmentConnection, Pipe)=True

         isConnectedTo(myPipe1, Pipe)=True

    }

  

   Valve myValve{

     isObjectProperty(Valve.isShutoffValve)=True  

   }





    hasObject(myConnectionPipe, myValve)=True

}



KS{

    isExternal(myValve)=True

    OR (hasObject(Space, myValve)=True   
getSpaceUsage(Space) = "MachinRoom"


} 




Python Code 변환 예정



49
연결송수관설비의 화재안전기준(NFSC 502) 제 6조 2호

2. 방수구는 아파트 또는 바닥면적이 1,000㎡ 미만인 층에 있어서는 계단(계단의 부속실을 포함하며 계단이 2 이상 있는 경우에는 그 중 1개의 계단을 말한다)으로부터 5m 이내에, 바닥면적 1,000㎡ 이상인 층(아파트를 제외한다)에 있어서는 각 계단(계단의 부속실을 포함하며 계단이 3 이상 있는 층의 경우에는 그 중 2개의 계단을 말한다)으로부터 5m 이내에 설치하되, 그 방수구로부터 그 층의 각 부분까지의 거리가 다음 각목의 기준을 초과하는 경우





//연결송수관설비의 화재안전기준(NFSC 502) 6조 (방수구) 2호

Check(NFSC502_6_0_2){
     KS 
}

KS{
     Space mySpce{
         getSpaceUsage(Space)="Stair.AncillaryRoom"
         OR
         (
         IF getObjectCoutn(Stair)>=2
             THEN getSpace(Stair.One)
         ELSE 
             getSpaceUsage(Space)="Stair"
         END IF
         )
     }

      Space mySpce2{
         getSpaceUsage(Space)="Stair.AncillaryRoom"
         OR
         (
         IF getObjectCoutn(Stair)>=3
             THEN getSpace(Stair.Two)
         ELSE 
             getSpaceUsage(Space)="Stair"
         END IF
         )
     }

     IF getBuildingUsage()="ApartmentHouse"
        OR getFloorArea()<1000 m2 
      
     THEN getObjectDistance(FireDepartmentConnection, mySpace)<5 m 

     ELSE IF getFloorArea()>1000 m2
    
     THEN getObjectDistance(FireDepartmentConnection, mySpace)<5 m 
          getResult(NFSC502_6_0_2_가)=True
          getResult(NFSC502_6_0_2_나)=True
        
     END IF
} 




Python Code 변환 예정



50
연결송수관설비의 화재안전기준(NFSC 502) 제 6조 2호 가 목

가. 지하가(터널은 제외한다) 또는 지하층의 바닥면적의 합계가 3,000㎡ 이상인 것은 수평거리 25m





//연결송수관설비의 화재안전기준(NFSC 502) 6조 (방수구) 2호 가목



Check(NFSC502_6_0_2_가){



    IF CS THEN KS1 ELSE KS2

}



CS{

       Space mySpace{

            getSpaceUsage()="UndergroundMarket"

            OR getFloorNumber()<0

        }



       getFloorArea(mySpace)>3000 m2

}



KS1{



    getElementDistance(FireDepartmentConnectionSystem.OutLet, Wall )<=25 m

    getElementDistance(FireDepartmentConnectionSystem.OutLet, Column )<=25 m



}





KS2{

       getResult(NFSC502_6_0_2_나)=True

 } 




Python Code 변환 예정



51
연결송수관설비의 화재안전기준(NFSC 502) 제 6조 3호

3. 11층 이상의 부분에 설치하는 방수구는 쌍구형으로 할 것. 다만, 다음 각목의 어느 하나에 해당하는 층에는 단구형으로 설치할 수 있다.





//연결송수관설비의 화재안전기준(NFSC 502) 6조 (방수구) 3호



Check(NFSC502_6_0_3){

     IF CS1 THEN KS1 ELSE IF CS2 THEN KS2

}





CS1{

   Space mySpace{

      getFloorNumber(Space)>=11

   }

   

    isInstalled(FireDepartmentConnectionSystem.Port, mySpace)=True

}



KS1{

       getObjectProperty(FireDepartmentConnectionSystem.Port.shapeType)="DoubleType"

}





CS2{

   getResult(NFSC502_6_0_3_가)=True

   OR getResult(NFSC502_6_0_3_나)=True

}



KS2{

getObjectProperty(FireDepartmentConnectionSystem.Port.shapeType)="SingleType"

} 




Python Code 변환 예정



52
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 5조 1 항 2호

2. 직통계단·직통계단의 계단실 및 그 부속실의 출입구





//유도등 및 유도표지의 화재안전기준(nfsc 303) 5조 (피난구유도등) 1항 2호

Check(NFSC303_5_1_2){
     KS
}

KS{
   Stair myStair {

        isObjectProperty(Stair.isDirect)=True       
    }

  Door myDoor{
      isObjectProperty(Door.isEntrance)=True     
     OR hasObject( myStair, Door)=True
     OR hasObject(myStair.Space,Door)=True
     OR hasObject(myStair.AncillaryRoom,Door)=True

  }

    LeadingLight myLight{
        isObjectProperty(LeadingLight.isForExit)=True
    }

   isEnstalled(myLight,myDoor)=True
   
   
} 




Python Code 변환 예정



53
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 5조 1 항 3호

3. 제1호와 제2호에 따른 출입구에 이르는 복도 또는 통로로 통하는 출입구





//유도등 및 유도표지의 화재안전기준(nfsc 303) 5조(피란구유도등) 1항 3호 

Check(NFSC303){
           KS
}
  Door myDoor{
      isObjectProperty(Door.isEntrance)=True     
     (OR hasObject( myStair, Door)=True
     OR hasObject(myStair.Space,Door)=True
     OR hasObject(myStair.AncillaryRoom,Door)=True)

       OR isDirectlyAccessible(Door, Ground)=True          
    }
 LeadingLight myLeadingLight{
        isObjectProperty(LeadingLight.isForExit)=True
    }

  Passage myPassage{
     isAccessible(myDoor, Passage)=True
   }
  Corridor myCorriodr{
     isAccessible(myDoor, Corridor)=True
  }

  Door myDoor2{
      isObjectProperty(Door.isEntrance)=True    
     isAccessible(myPassage, Door)=True
     or isAccessible(myCorridor, Door)=True
  }

isInstalled(myLeadingLight, myDoor2)=True

} 




Python Code 변환 예정



54
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 7조 2 항

②객석내의 통로가 경사로 또는 수평로로 되어 있는 부분은 다음의 식에 따라 산출한 수(소수점 이하의 수는 1로 본다)의 유도등을 설치하고, 그 조도는 통로바닥의 중심선 0.5m 높이에서 측정하여 0.2㏓ 이상이어야 한다. <개정 2012.8.20>





//유도등 및 유도표지의 화재안전기준(nfsc 303) 7조 (객석유도등 설치기준) 2항



Check(NFSC303_7_2){

            IF CS THEN KS

}



CS{

Space mySpace{
Space.usage = "Auditorium"
}
isInstalled(Passage, mySpace) = TRUE
isObjectProperty(Passage.isFlatWay) = TRUE
OR isObjectProperty(Passage.isSlopeWay) = TRUE


}





KS{

    LeadingLight myLeadingLight{

          isObjectProperty(LeadingLight.isForSeat)=True

    }



    isExist(myLeadingLight)=True



    //LAP means Length of Auditorium passage

    LAP= getObjectLength(AuditoriumPassage)

    getObjectCount(myLeadingLight)>= LAP/4-1

   // getSpaceIlluminance(AuditoriumPassage, "통로바닥의 중심선 0.5m 높이에서 측정")>0.2 lx , 측정 기준에 관한 파라미터 추가 필요 



} 




Python Code 변환 예정



55
유도등 및 유도표지의 화재안전기준(NFSC 303) 제 7조 3 항

③객석내의 통로가 옥외 또는 이와 유사한 부분에 있는 경우에는 해당 통로 전체에 미칠 수 있는 수의 유도등을 설치하되, 그 조도는 통로바닥의 중심선 0.5m의 높이에서 측정하여 0.2㏓ 이상이 되어야 한다.<개정 2008.12.15, 2012.8.20>





//유도등 및 유도표지의 화재안전기준(nfsc 303) 7조 (객석유도등 설치기준) 3항

Check(NFSC303_7_3){
          IF CS THEN KS 
}

CS{
     isExternal(AuditoriumPassage)=True
}

KS{
     getSpaceIlluminance(AuditoriumPassage, "통로바닥의 중심선 0.5m의 높이에서 측정")>0.2 lx
} 




Python Code 변환 예정



56
자동화재탐지설비 및 시각경보장치의 화재안전기준(NFSC 203) 제 7조 3 항 10호 가 목

가. 감지기의 부착높이에 따라 다음 표에 따른 바닥면적마다 1개 이상으로 할 것





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 3항 10호 가목

Check(NFSC203_7_3_10_가){

	IF (CS1 THEN KS1) OR (CS2 THEN KS2)

}



	Sensor mySensor1{

	getObjectProperty(Sensor.type) = "Type1"

	OR getObjectProperty(Sensor.type) = "Type2"

	}

	Sensor mySensor2{

	isObjectProperty(Sensor.type) = "Type3"

	}



CS1{

	getObjectVerticalDistance(FloorSlab, Sensor) < 4m

} 

KS1{

	isInstalled(mySensor1, FloorSlab.Space, C, 150) = TRUE)

	OR isInstalled(mySensor2, FloorSlab.Space, C, 50) = TRUE)

}

CS2{

	getObjectVerticalDistance(FloorSlab, Sensor) >= 4m

	getObjectVerticalDistance(FloorSlab, Sensor) < 20m

}

KS2{

	isInstalled(mySensor1, FloorSlab.Space, C, 75) = TRUE)

} 




Python Code 변환 예정



57
자동화재탐지설비 및 시각경보장치의 화재안전기준(NFSC 203) 제 7조 3 항 10호 나 목

나. 감지기는 복도 및 통로에 있어서는 보행거리 30m(3종에 있어서는 20m)마다, 계단 및 경사로에 있어서는 수직거리 15m(3종에 있어서는 10m)마다 1개 이상으로 할 것





//	자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 3항 10호 나목
Check(NFSC203_7_3_10_2){
	IF (CS1 THEN KS1) OR (CS2 THEN KS2)
}

CS1{
	hasSpace(Corridor, SmokeSensor) = TRUE
	OR hasSpace(Passage, SmokeSensor) = TRUE
}

KS1{
	getObjectInterval(SmokeSensor) <= 30m
}

CS2{
	hasSpace(Stair, SmokeSensor) = TRUE
	OR hasSpace(Ramp, SmokeSensor) = TRUE
}

KS2{
	getObjectInterval(SmokeSensor) <= 15m
} 




Python Code 변환 예정



58
자동화재탐지설비 및 시각경보장치의 화재안전기준(NFSC 203) 제 7조 4 항 2호

2. 전산실 또는 반도체 공장등 : 광전식공기흡입형감지기. 이 경우 설치장소·감지면적 및 공기흡입관의 이격거리등은 형식승인 내용에 따르며 형식승인 사항이 아닌 것은 제조사의 시방에 따라 설치하여야 한다.





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 4항 2호

Check(NFSC203_7_4_2){
	IF CS THEN KS
}
CS{
	getSpaceUsage() = "ComputerRoom"
	OR getBuildingUsage() = "SemiconductorFactory"
}
KS{
	Sensor mySensor1{
	getObjectProperty(Sensor.sensingMode) = "PhotoelectricType"
	getObjectProperty(Sensor.sensingRange) = "AspiratingType"
	}
	isInstalled(mySensor1) = TRUE
} 




Python Code 변환 예정



59
자동화재탐지설비 및 시각경보장치의 화재안전기준(NFSC 203) 제 7조 5 항 5호

5. 목욕실·욕조나 샤워시설이 있는 화장실·기타 이와 유사한 장소





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 5항 5호

Check(NFSC203_7_5_5){
	IF CS THEN KS
}
CS{
	Space mySpace1{
	getSpaceUsage() = "Toliet"
	}
	Space mySpace2{
	getSpaceUsage() = "Bathoroom"
	}
	isInstalled(mySpace1, mySpace2) = TRUE
	
KS{
	isInstalled(Sensor) = FALSE
} 




Python Code 변환 예정



60
자동화재탐지설비 및 시각경보장치의 화재안전기준(NFSC 203) 제 7조 5 항 8호

8. 실내의 용적이 20㎥ 이하인 장소





자동화재탐지설비의 화재안전기준(nfsc 203) 7조 (감지기) 5항 8호

Check(NFSC203_7_5_6){
	IF CS THEN KS
}
CS{
	Space mySpace{
	isExternal(Space) = FALSE
	}
	(mySpace.volume) <= 20m3
}
KS{
	isInstalled(Sensor) = FALSE
} 




Python Code 변환 예정



61
장애인ㆍ노인ㆍ임산부 등의 편의증진 보장에 관한 법률 시행규칙 제 별표1조

1. 장애인등의 통행이 가능한 접근로 가. 유효폭 및 활동공간 (1) 휠체어사용자가 통행할 수 있도록 접근로의 유효폭은 1.2미터 이상으로 하여야 한다. (2) 휠체어사용자가 다른 휠체어 또는 유모차 등과 교행할 수 있도록 50미터마다 1.5미터×1.5미터 이상의 교행구역을 설치할 수 있다. (3) 경사진 접근로가 연속될 경우에는 휠체어사용자가 휴식할 수 있도록 30미터마다 1.5미터×1.5미터 이상의 수평면으로 된 참을 설치할





//장애인ㆍ노인ㆍ임산부 등의 편의증진보장에 관한 법률 시행규칙 별표1 편의시설의 구조·재질등에 관한 세부기준(제2조제1항관련)

Check(ERCDAPA_2_1_*_1_4_나_1){
	IF (CS1 THEN KS1) OR (CS2 THEN KS2)

	ParkingUnit myParkingUnit{
		isObjectProperty(ParkingUnit.isParallelParking) = TRUE
	}

	CS1{
		isObjectProperty(ParkingUnit.isParallelParking) = TRUE
	}

	KS1{
		getObjectWidth(ParkingLotArea.isHandicapParking, a) >= 3.3 m
		getElementLength(ParkingLotArea.isHandicapParking) >= 5 m
	}

	CS2{
		isObjectProperty(ParkingLotArea.isParallelParking) = FALSE
	}

	KS2{
		getObjectWidth(ParkingLotArea.isHandicapParking, a) >= 2 m
		getElementLength(ParkingLotArea.isHandicapParking) >= 6 m
	}
}


check(ERCDAPA_2_1_*_1_4_나_2){
	getObjectGradient(ParkingSpace.Floor) <= 1/50
}


check(ERCDAPA_2_1_*_1_6_가_1){
	
	Door myDoor1{
		isObjectProperty(Door.isEntrance) = TRUE
	}

	Door myDoor2{
		isObjectProperty(Door.isEntrance) = TRUE
		getObject(Door.isEntrance) != getObject(myDoor1)
	}

	getObjectWidth(Door.isEntrance) >= 0.8 m
	isEgressDirection(myDoor1) = isEgressDirection(myDoor2)
	getObjectDistance(myDoor1, myDoor2) >= 1.2 m
}


check(ERCDAPA_2_1_*_1_6_가_2){
	
	isObjectProperty(Door.isAutomatic) = FALSE
	isObjectProperty(Door.isSillFree) = TRUE
}

check(ERCDAPA_2_1_*_1_8_가_2){
	
	getObjectVerticalDistance(FloorSurface,Door.Bottom)
}

check(ERCDAPA_2_1_*_1_8_나){
	
	Stair myStair{
		isObjectProperty(Stair.isEscape) = TRUE
		isObjectProperty(Stair.isOutdoor) = TRUE
	}

	getObjectWidth(myStair) >= 0.9 m 
	getObjectWidth(myStair.StairLanding) >= 0.9 m

	Stair myStair2{
		isObjectProperty(Stair.isEscape) = FALSE
		isObjectProperty(Stair.isOutdoor) = FALSE
	}

	getObjectWidth(myStair2) >= 1.2 m 
	getObjectWidth(myStair2.StairLanding) >= 1.2 m
}


check(ERCDAPA_2_1_*_1_8_다_1){
	
	hasObject(Stair, VerticalSurfaceStair) = TRUE
}

check(ERCDAPA_2_1_*_1_8_다_2){
	
	getObjectWidth(Stair.threadWidth) >= 0.28 m
	getObjectHeight(Stair.riserHeight) <= 0.18m
}

check(ERCDAPA_2_1_*_1_8_다_3){
	
	getObjectGradient(Stair.riserGradient) >= 60
	getObjectLength(Stair.nosingLength) < 3 cm
} 




Python Code 변환 예정



62
장애인ㆍ노인ㆍ임산부 등의 편의증진 보장에 관한 법률 시행령 제 별표2조

1. 삭제 <2006.1.19> 2. 공원<표-EDCDAPA_*_2_T1> (편의시설의 종류 :설치기준) 가. 장애인 등의 출입이 가능한 출입구 :공원 외부에서 내부로 이르는 출입구는 주출입구를 포함하여 적어도 하나 이상을 장애인등의 출입이 가능하도록 유효폭·형태 및 부착물 등을 고려하여 설치하여야 한다. 나. 장애인등의 통행이 가능한 보도 :공원시설(공중이 직접 이용하는 시설에 한한다)에 접근할 수 있는 공원안의 보도중 적어도 하나는 장애인등이 통행할





// 장애인ㆍ노인ㆍ임산부 등의 편의증진보장에 관한 법률 시행령 별표2 대상시설별 편의시설의 종류 및 설치기준(제4조관련)



Check(EDCDAPA_*_2_3_가_2_가){

IF CS1 AND CS2 THEN KS

}



ParkingLot myParkingLot{

isObjectProperty(ParkingLot.isAttachedParking) = TRUE

}

CS1 {

isExist(myParkingLot) = TRUE

}

CS2 {

getObjectProperty(myParkingLot.numberOfParkingUnit) >= 10

}

KS1 {

Area myArea{

isObjectProperty(ParkingLotArea.isHandicapParking)=TRUE

}

hasSpace(myParkingLot, myArea) = TRUE

getResult(EDPA_*_1) = TRUE

}



Check(EDCDAPA_*_2_3_가_4_가){

KS1 IF CS1 THEN KS2

}



Door myDoor1{

	isObjectProperty(Door.isEntrance)=TRUE

	isObjectProperty(myDoor1.isHandicapAccessible)=TRUE

}

Door myDoor2{

Door.Space.usage = “Office”

isObjectProperty(myDoo2.isHandicapAccessible)=TRUE

}

KS1 {

isExist(myDoor1) = TRUE

isExist(myDoor2) = TRUE

}

CS1{

Building.usage = “BusinessFacility.GovernmentOfficeBuilding”

Building.usage != “ClassINeighborhoodLivingFacility”

}

KS2 {

isObjectProperty(myDoor1.isAutomatic)=TRUE

isObjectProperty(myDoo2.isAutomatic)=TRUE

}







ParkingLot myParkingLot{

isObjectProperty(ParkingLotArea.isHandicapParking)=TRUE

}





Building myBuilding1_1{

	Building.usage = “ClassINeighborhoodLivingFacility.RetailStore”

	Building.usage = “ClassINeighborhoodLivingFacility.Barbershop”

	Building.usage = “ClassINeighborhoodLivingFacility.BeautyShop”

	Building.usage = “ClassINeighborhoodLivingFacility.Bathhouse”

}

Building myBuilding1_2{

	Building.usage = “ClassINeighborhoodLivingFacility.CommunityCenter”

	Building.usage = “ClassINeighborhoodLivingFacility.PoliceBox”

	Building.usage = “ClassINeighborhoodLivingFacility.PoliceSubstation”

	Building.usage = “ClassINeighborhoodLivingFacility.PostOffice”

Building.usage = “ClassINeighborhoodLivingFacility.HealthCenter”

	Building.usage = “ClassINeighborhoodLivingFacility.PublicLibrary”

	Building.usage = “ClassINeighborhoodLivingFacility.NationalHealthInsuranceService_NationalPensionService_Korea EmploymentAgencyForTheDisabled_KoreaWorkersCompensationAndWelfareServiceOffice”

}

Building myBuilding1_3{

	Building.usage = “ClassINeighborhoodLivingFacility.Clinic_ DentalClinic_OrientalMedicalClinic_MaternityClinic”

}

Building myBuilding1_4{

	Building.usage = “ClassINeighborhoodLivingFacility.CommunityChildCenter”

	Building.facilityArea >= 300 m2

}

Building myBuilding1_5{

	Building.usage = “ClassINeighborhoodLivingFacility.Shelter”

}

Building myBuilding1_6{

	Building.usage = “ClassINeighborhoodLivingFacility.PublicToilet”

}

Building myBuilding2_1{

	Building.usage = “ClassIINeighborhoodLivingFacility.Restaurant”

	Building.usage = “ClassIINeighborhoodLivingFacility.RestingRestaurant”

	Building.usage = “ClassIINeighborhoodLivingFacility.Bakery”

	Building.usage != “ClassINeighborhoodLivingFacility”

Building.facilityArea >= 300 m2

}

Building myBuilding2_2{

	Building.usage = “ClassIINeighborhoodLivingFacility.MassageParlor”

}

Building myBuilding3_1{

	Building.usage = “CulturalAndAssemblyFacility.PerformanceHall”

Building.usage = “CulturalAndAssemblyFacility.Auditorium”

}

Building myBuilding3_2{

	Building.usage = “CulturalAndAssemblyFacility.AssemblyHall”

}

Building myBuilding3_3{

	Building.usage = “CulturalAndAssemblyFacility.ExhibitionHall”

Building.usage = “CulturalAndAssemblyFacility.ZoologicalAndBotanicalGarden”

}

Building myBuilding4_1{

	Building.usage = “ReligiousFacility.ReligiousAssemblyFacility”

	Building.facilityArea >= 500 m2

}

Building myBuilding5_1{

	Building.usage = “CommercialFacility.WholesaleMarket”

	Building.usage = “CommercialFacility.RetailMarket”

	Building.usage = “CommercialFacility.Shop”

	Building.facilityArea >= 1000 m2

}

Building myBuilding6_1{

	Building.usage = “MedicalFacility.Hospital”

	Building.usage = “MedicalFacility.DetentionHospital”

}

Building myBuilding7_1{

	Building.usage = “EducationAndResearchFacility.School”

	Building.usage = “EducationAndResearchFacility.SpecialSchool”

	Building.usage != “EducationAndResearchFacility.Kindergarten”

}

Building myBuilding7_2{

	Building.usage = “EducationAndResearchFacility.Kindergarten”

}

Building myBuilding7_3{

	Building.usage = “EducationAndResearchFacility.TrainingInstitute”

	Building.usage = “EducationAndResearchFacility.VocationalTrainingCenter”

	Building.usage != “EducationAndResearchFacility.EducationalInstitute”

Building.facilityArea >= 500 m2

}

Building myBuilding8_1{

	Building.usage = “FacilitiesForTheAgedAndChildren.ChildrenRelatedFacility”

Building.usage = “FacilitiesForTheAgedAndChildren.WelfareFacilityForTheAged”

Building.usage = “FacilitiesForTheAgedAndChildren.SocialWelfareFacility”

Building.usage = “경로당”

Building.usage = “ResidentialFacilityForTheDisabled”

Building.facilityArea >= 500 m2

}

Building myBuilding9_1{

	Building.usage = “Trainingfacility.TrainingFacilityInLivingZone”

	Building.usage = “Trainingfacility.TrainingFacilityInNatureZone”

}

Building myBuilding10_1{

	Building.usage = “SportsFacility”

Building.facilityArea >= 500 m2

}

Building myBuilding11_1{

	Building.usage = “BusinessFacility.GovernmentOfficeBuilding”

Building.facilityArea >= 500 m2

}

Building myBuilding11_2{

	Building.usage = “BusinessFacility.FinanceBusiness”

	Building.usage = “BusinessFacility.Office”

	Building.usage = “BusinessFacility.NewspaperOffice”

	Building.usage = “BusinessFacility.Officetel”

Building.facilityArea >= 500 m2

}

Building myBuilding12_1{

	Building.usage = “LodgingFacility.GeneralLodgingFacility”

}

Building myBuilding12_2{

	Building.usage = “LodgingFacility.TouristAccommodation”

}

Building myBuilding13_1{

	Building.usage = “Factory”

}

Building myBuilding14_1{

	Building.usage = “FacilityForMotorVehicle.ParkingLot”

Building.usage = “FacilityForMotorVehicle.DrivingSchool”

}

Building myBuilding15_1{

	Building.usage = “FacilityForBroadcastingAndTelecommunication.BroadcastingStation”

Building.facilityArea >= 1000 m2

}

Building myBuilding15_2{

	Building.usage = “FacilityForBroadcastingAndTelecommunication.TelegraphAndTelephoneStation”

Building.facilityArea >= 1000 m2

}

Building myBuilding16_1{

	Building.usage = “CorrectionalFacilityAndMilitaryInstallation.Prison”

Building.usage = “CorrectionalFacilityAndMilitaryInstallation.DetentionCenter”

}

Building myBuilding17_1{

	Building.usage = “CemeteryAndRelatedFacility.CremationFacility”

	Building.usage = “CemeteryAndRelatedFacility.CharnelHouse”

	Building.usage != “ReligiousFacility”

}

Building myBuilding18_1{

	Building.usage = “FacilityForTourismAndRelaxation.BandStand”

	Building.usage = “FacilityForTourismAndRelaxation.OutdoorTheater”

	Building.usage = “FacilityForTourismAndRelaxation.ChildrenCenter”

}

Building myBuilding18_2{

	Building.usage = “FacilityForTourismAndRelaxation.RestArea”

}

Building myBuilding19_1{

	Building.usage = “FuneralParlor”

}







Check(EDCDAPA_*_2_3_나){

IF (CS1 THEN KS1) OR (CS2 THEN KS2)

}



CS1{

Building myBuilding20_1 {

getObject(myBuilding1_1 | myBuilding12_2)

}

KS1{

hasSpace(myBuilding20_1, myParkingLot) = TRUE 

OR hasSpace(myBuilding20_1, myParkingLot) = FALSE

}

CS2{

 Building myBuilding20_2 {

getObject(myBuilding1_2 | myBuilding1_3 | myBuilding1_4 | myBuilding2_1 | myBuilding2_2 | myBuilding3_1 | myBuilding3_2 | myBuilding3_3 | myBuilding4_1 | myBuilding5_1 | Building myBuilding6_1 | Building myBuilding7_1 | myBuilding7_2 | myBuilding7_3 | myBuilding8_1 | myBuilding9_1 | myBuilding10_1 | myBuilding11_1 | myBuilding11_2 | myBuilding12_1 | myBuilding13_1 | myBuilding14_1 | myBuilding15_1 | myBuilding15_2 | myBuilding16_1 | myBuilding17_1 | myBuilding18_1 | myBuilding18_2 | myBuilding19_1) 

}

KS2{

hasSpace(Building20_2, myParkingLot) = TRUE

}



Check(EDCDAPA_*_2_3_나){

IF CS THEN KS



CS{

Building myBuilding20_3{

getObject(myBuilding1_1 | myBuilding1_2 | myBuilding1_3 | myBuilding1_4 | myBuilding1_5 | myBuilding1_6 | myBuilding2_1 | myBuilding2_2 | myBuilding3_1 | myBuilding3_2 | myBuilding3_3 | myBuilding4_1 | myBuilding5_1 | Building myBuilding6_1 | Building myBuilding7_1 | myBuilding7_2 | myBuilding7_3 | myBuilding8_1 | myBuilding9_1 | myBuilding10_1 | myBuilding11_1 | myBuilding11_2 | myBuilding12_1 | myBuilding13_1 | myBuilding14_1 | myBuilding15_1 | myBuilding15_2 | myBuilding16_1 | myBuilding17_1 | myBuilding18_1 | myBuilding18_2 | myBuilding19_1) 

}

KS{

isObjectProperty(myBuilding20_3.Door.isSillFree) = TRUE

} 




Python Code 변환 예정



63
주차장법 제 19조의5조 1 항

① 기계식주차장의 설치기준은 국토교통부령으로 정한다. <개정 2013.3.23, 2018.8.14>





//주차장법 19조의5 (기계식주차장의 설치기준)

Check(PLA_19-5){
  IF CS THEN KS
}

CS{
   getSpaceUsage()="MechanicalParking"
}

KS{
    getResult(ERPA_16-2_0_1)=True
} 




Python Code 변환 예정



64
주차장법 시행규칙 제 16조의2조 1 항 1호 가 목

가. 중형 기계식주차장(길이 5.05미터 이하, 너비 1.9미터 이하, 높이 1.55미터 이하, 무게 1,850킬로그램 이하인 자동차를 주차할 수 있는 기계식주차장을 말한다. 이하 같다): 너비 8.1미터 이상, 길이 9.5미터 이상의 전면공지 또는 지름 4미터 이상의 방향전환장치와 그 방향전환장치에 접한 너비 1미터 이상의 여유 공지





//주차장법 시행규칙 16조의2 (기계식주차장의 설치기준) 1호 가목



Check(ERPA_16-2_0_1_가){

   IF CS THEN KS

}



CS{

ParkingLot myParkingLot{
	ParkingLot.operationType = "MechanicalParking"
}
   getObjectProperty(myParkingLot.scale)="MiddleSize"

}



KS{

   Space mySpace{

     getSpaceUsage()="FrontageSpace"

     Space.width>=8.1 m

     Space.length>9.5 m

   }

  

    isExist(mySpace)=True

    OR isExist(DirectionSwitchingEquipment)=True

       getObjectDiameter(DirectionSwitchingEquipment)>=4 m

       isExist(Space)=True

       isAdjacent(DirectionSwitchingEquipment, Space)=True

       Space.width>=1 m

} 




Python Code 변환 예정



65
주차장법 시행규칙 제 11조 4 항

④ 주차대수 50대 이상의 부설주차장에 설치되는 확장형 주차단위구역에 관하여는 제6조제1항제14호를 준용한다. <신설 2012.7.2>





//주차장법 시행규칙 11조 (부설주차장의 구조·설비기준) 4항
Check(ERPA_11_4){
	IF CS THEN KS
}

CS{
	ParkingLot myParkingLot{
		isObjectProperty(ParkingLot.isAttachedParking) = TRUE
		getObjectProperty(ParkingLot.numberOfParkingUnit) >= 50
	}

	ParkingUnit myParkingUnit{
		getObjectProperty(ParkingUnit) = "ExtensionType"
	}

	hasSpace(myParkingLot, myParkingUnit) = TRUE
}

KS{
	getResult(ERPA_6_1_14) = TRUE
} 




Python Code 변환 예정



66
주차장법 시행규칙 제 6조 1 항 14호

14. 노외주차장에는 제3조제1항제2호에 따른 확장형 주차단위구획을 주차단위구획 총수(평행주차형식의 주차단위구획 수는 제외한다)의 30퍼센트 이상 설치하여야 한다.





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 1항 14호
Check(ERPA_6_1_14){
	KS
}

KS{
	
	ParkingLot myParkingLot{
		isObjectProperty(ParkingLot.isOffStreetParking) = TRUE
	}

	ParkingUnit myParkingUnit{
		getResult(ERPA_3_1_2) = TRUE
		getObjectProperty(ParkingUnit.parkingUseType) = "ExtensionType"
	}

	ParkingUnit myParkingUnit2{
		getResult(ERPA_3_1_2) = TRUE
		getObjectProperty(ParkingUnit.parkingType) = "ParallelParking"
	}

	hasSpace(myParkingLot, myParkingUnit) = TRUE	
	(getObjectProperty(ParkingUnit.numberOf)*0.3 - getObjectNumber(myParkingUnit2)) <= getObjectNumber(myParkingUnit)
} 




Python Code 변환 예정



67
주차장법 시행규칙 제 6조 4 항 2의2호

2의2. 「석유 및 석유대체연료 사업법 시행령」 제2조제3호에 따른 주유소(특별시장·광역시장, 시장·군수 또는 구청장이 설치한 노외주차장만 해당한다)





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 4항 3호

Check(ERPA_6_4_3){

	KS

}



KS{

	getSpaceUsage(ParkingLotSubsidiaryFacility) = "GasStation"

} 




Python Code 변환 예정



68
주차장법 시행규칙 제 6조 1 항 7호

7. 노외주차장의 내부공간의 일산화탄소의 농도는 주차장을 이용하는 차량이 가장 빈번한 시각의 전후 8시간의 평균치가 50피피엠 이하(다중이용시설등의실내공기질관리법 제3조제1항제9호의 규정에 의한 실내주차장은 25피피엠 이하)로 유지되어야 한다.





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 1항 7호
Check(ERPA_6_1_7){
       KS
}

KS{
	isObjectProperty(ParkingLot.isOffStreetParking)=TRUE
	getObjectHeight(ParkingLotArea.Space) >= 2.1m
} 




Python Code 변환 예정



69
주차장법 시행규칙 제 6조 4 항

④노외주차장에 설치할 수 있는 부대시설은 다음 각 호와 같다. 다만, 그 설치하는 부대시설의 총면적은 주차장 총시설면적의 20퍼센트를 초과하여서는 아니 된다. <개정 1992.9.5, 1996.6.29, 2009.6.30>





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 4항

Check(ERPA_6_4){

	IF !CS THEN KS

}



CS{

	TFA = getFloorArea(ParkingLot)

	getTotalObjectArea(	ParkingLotSubsidiaryFacility) > TFA*0.2

}



KS{

	ParkingLot myParkingLot{

		isObjectProperty(ParkingLot.isOffStreetParking) = TRUE

	}



	SubsidiaryFacility mySubsidiaryFacility{

		getResult(ERPA_4_1) = TRUE

		OR getResult(ERPA_4_2) = TRUE

		OR getResult(ERPA_4_3) = TRUE

	}



	hasSpace(myParkingLot, mySubsidiaryFacility) = TRUE

} 




Python Code 변환 예정



70
주차장법 시행규칙 제 6조 4 항 1호

1. 관리사무소ㆍ휴게소 및 공중변소





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 4항 1호

Check(ERPA_6_4_1){

	KS

}



KS{

	getSpaceUsage(ParkingLotSubsidiaryFacility) = "ControlOffice"

	OR getSpaceUsage(ParkingLotSubsidiaryFacility) = "RestArea"

	OR getSpaceUsage(ParkingLotSubsidiaryFacility) = "PublicToilet"

} 




Python Code 변환 예정



71
주차장법 시행규칙 제 6조 4 항 2호

2. 간이매점 및 자동차의 장식품판매점





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 4항 2호

Check(ERPA_6_4_2){

	KS

}



KS{

	getSpaceUsage(ParkingLotSubsidiaryFacility) = "SnackBar"

	OR getSpaceUsage(ParkingLotSubsidiaryFacility) = "CarOrnamentationShop"

	OR getSpaceUsage(ParkingLotSubsidiaryFacility) = "ElectricVehicleChargingStation"

} 




Python Code 변환 예정



72
주차장법 시행규칙 제 6조 5 항

⑤법 제20조제2항 또는 제3항의 규정에 의한 노외주차장에 설치할 수 있는 부대시설의 종류 및 주차장 총시설면적중 부대시설이 차지하는 비율에 대하여는 제4항의 규정에 불구하고 특별시ㆍ광역시ㆍ시ㆍ군 또는 구의 조례로 정할 수 있다. 이 경우 부대시설이 차지하는 면적의 비율은 주차장 총 시설면적의 40퍼센트를 초과할 수 없다. <신설 1996.6.29, 2004.7.1>





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 5항

Check(ERPA_6_5){

	IF CS THEN KS

}



CS{

	ParkingLot myParkingLot{

		isObjectProperty(ParkingLot.isOffStreetParking) = TRUE

		getResult(PLA_20_2) = TRUE

		OR getResult(PLA_20_3) = TRUE

	}



	hasSpace(myParkingLot,SubsidiaryFacility) = TRUE

	getTotalFloorArea(myParkingLot.facilityArea)

}



KS{

	getFloorArea(ParkingLotSubsidiaryFacility) <= getTotalObjectArea(ParkingLot)*0.4

} 




Python Code 변환 예정



73
주차장법 시행규칙 제 6조 6 항

⑥시장ㆍ군수 또는 구청장이 노외주차장내에 국토의계획및이용에관한법률 제2조제7호의 도시계획시설을 부대시설로서 중복하여 설치하고자 하는 경우에는 노외주차장외의 용도로 사용하고자 하는 도시계획시설이 차지하는 면적의 비율은 부대시설을 포함하여 주차장 총 시설면적의 40퍼센트를 초과할 수 없다. <신설 2004.7.1>





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 6항

Check(ERPA_6_6){

	IF CS THEN KS

}



ParkingLot myParkingLot{

	isObjectProperty(ParkingLot.isOffStreetParking) = TRUE

}


Building myBuilding{
Building.usage = "UrbanGunPlanningFacility"
getResult(LPUA_2_0_7) = TRUE
hasSpace(myParkingLot, Building) = TRUE
getSpaceUsage(Building) = getSpaceUsage(SubsidiaryFacility)

}

Building myBuilding1{
Building.usage = "UrbanGunPlanningFacility"
}

CS{

	getObjectNumber(myBuilding) >= 2

}



KS{

	(getFloorArea(myBuilding1)- getFloorArea(myBuilding)) <= (getTotalObjectArea(ParkingLot) + getTotalObjectArea(SubsidiaryFacility))*0.4

} 




Python Code 변환 예정



74
주차장법 시행규칙 제 16조의2조 1 항 1호

1. 기계식주차장치 출입구의 앞면에는 다음 각 목에 따라 자동차의 회전을 위한 공지(空地)(이하 "전면공지"라 한다) 또는 자동차의 방향을 전환하기 위한 기계장치(이하 "방향전환장치"라 한다)를 설치하여야 한다.





//주차장법 시행규칙 16조의2 (기계식주차장의 설치기준) 1호



Check(ERPA_16-2_0_1){

   

  KS

}



KS{

  isExist(FrontageSpace, MechanicalParkingEquipment.Opening.FrontSurface)=True

  isExist(DirectionSwitchingEquipment, MechanicalParkingEquipment.Opening.FrontSurface)=True

  getResult(ERPA_16-2_0_1_가)=True

   getResult(ERPA_16-2_0_1_나)=True

} 




Python Code 변환 예정



75
주차장법 시행규칙 제 16조의2조 1 항 1호 나 목

나. 대형 기계식주차장(길이 5.75미터 이하, 너비 2.15미터 이하, 높이 1.85미터 이하, 무게 2,200킬로그램 이하인 자동차를 주차할 수 있는 기계식주차장을 말한다. 이하 같다): 너비 10미터 이상, 길이 11미터 이상의 전면공지 또는 지름 4.5미터 이상의 방향전환장치와 그 방향전환장치에 접한 너비 1미터 이상의 여유 공지





//주차장법 시행규칙 16조의2 (기계식주차장의 설치기준) 1호 나목



Check(ERPA_16-2_0_1_나){

   IF CS THEN KS      

}





CS{
ParkingLot myParkingLot{
	ParkingLot.operationType = "MechanicalParking"
}
   getObjectProperty(myParkingLot.scale)="LargeSize"

}



KS{

   Space mySpace{

     getSpaceUsage()="FrontageSpace"

     Space.width>=10 m

     Space.length>11 m

   }

  

    isExist(mySpace)=True

    OR isExist(DirectionSwitchingEquipment)=True

       getObjectDiameter(DirectionSwitchingEquipment)>=4.5 m

       isExist(Space)=True

       isAdjacent(DirectionSwitchingEquipment, Space)=True

       Space.width>=1 m

} 




Python Code 변환 예정



76
주차장법 시행규칙 제 16조의2조 1 항 2호

2. 기계식주차장치의 내부에 방향전환장치를 설치한 경우와 2층 이상으로 주차구획이 배치되어 있고 출입구가 있는 층의 모든 주차구획을 기계식주차장치 출입구로 사용할 수 있는 기계식주차장의 경우에는 제1호에도 불구하고 제6조제1항제3호 또는 제11조제5항제2호를 준용한다.





//주차장법 시행규칙 16조의2 (기계식주차장의 설치기준) 2호

Check(ERPA_16-2_0_2){
   IF CS THEN KS      
}

CS{
   hasObject(MechanicalParkingEquipment,DirectionSwitchingEquipment)=True
   OR 
   //2츠이상으로 주차구획이 배치되어 있고 
   // 출입구가 있는 층의 모든 주차구획을 기계식주차장치 출입구로 사용할 수 있는
   getSpaceUsage()="MechanicalParking"
}

KS{
   getResult(ERPA_6_1_3)=True
   OR getResult(ERPA_11_5_2)=True
} 




Python Code 변환 예정



77
주차장법 시행규칙 제 16조의2조 1 항 3호

3. 기계식주차장에는 도로에서 기계식주차장치 출입구까지의 차로(이하 "진입로"라 한다) 또는 전면공지와 접하는 장소에 자동차가 대기할 수 있는 장소(이하 "정류장"이라 한다)를 설치하여야 한다. 이 경우 주차대수 20대를 초과하는 20대마다 한 대분의 정류장을 확보하여야 하며, 정류장의 규모는 다음 각 목과 같다. 다만, 주차장의 출구와 입구가 따로 설치되어 있거나 진입로의 너비가 6미터 이상인 경우에는 종단경사도가 6퍼센트 이하인 진입로의 길이 6미터





//주차장법 시행규칙 16조의2 (기계식주차장의 설치기준) 3호

Check(ERPA_16-2_0_3){
       IF CS THEN KS 
}

CS{
   getSpaceUsage()="MechanicalParking"
}


KS{
   Space mySpace{
       isAdjacent(FrontageSpace,Space)=True
   }
   
   isExist(ApproachRoad)=True
   isExist(mySpace)=True
   IF(// 주차장의 출구와 입구가 따로 설치되어 있거나
   OR "진입로".width>6 m) THEN
   //종단경사도가 6퍼센트 이하인 진입로의 길이 6미터마다 
한 대분의 정류장을 확보한 것으로 본다.
   ELSE THEN

   //주차대수 20대를 초과하는 20대마다 한 대분의 정류장을 확보하여야 하며
   getResult(ERPA_16-2_0_3_가)=True
   getResult(ERPA_16-2_0_3_나)=True

  END IF

} 




Python Code 변환 예정



78
주차장법 시행규칙 제 6조 1 항 3호 나 1) 목

1) 이륜자동차전용 노외주차장 (표)





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 1항 3호 나목
Check(ERPA_6_1_3_나){
     IF CS THEN KS
}

CS{
   getSpaceUsage()="ParkingLot"
   getObjectProperty(ParkingLot.parkingUseType)="TwowheeledVehicle"
}

KS{
   IF 	getObjectProperty(ParkingUnit.parkingType)="ParallelParking"
       IF getObjectCount(Opening)>=2
       THEN  ParkingLot.Driveway.width>=2.25 m
       ELSE IF getObjectCount(Opening)=1
       THEN  ParkingLot.Driveway.width>=3.5 m
       END IF
   ELSE IF getObjectProperty(ParkingUnit.parkingType)="RightAngleParking"
       IF getObjectCount(Opening)>=2
       THEN  ParkingLot.Driveway.width>=4.0 m
       ELSE IF getObjectCount(Opening)=1
       THEN  ParkingLot.Driveway.width>=4.0 m
       END IF
   ELSE IF getObjectProperty(ParkingUnit.parkingType)="45AngleParking"
       IF getObjectCount(Opening)>=2
       THEN  ParkingLot.Driveway.width>=2.3 m
       ELSE IF getObjectCount(Opening)=1
       THEN  ParkingLot.Driveway.width>=3.5 m
       END IF
  END IF
}
 




Python Code 변환 예정



79
주차장법 시행규칙 제 6조 1 항 3호 나 2) 목

2) 1) 외의 노외주차장 (표)





//주차장법 시행규칙 6조 (노외주차장의 구조·설비기준) 1항 3호 나목

Check(ERPA_6_1_3_나){

     IF CS THEN KS

}



CS{

   getSpaceUsage()="ParkingLot"

   isObjectProperty(ParkingLot.isOffStreetParking)=True

   getObjectProperty(ParkingLot.parkingUseType)!="TwowheeledVehicle"

}



KS{

   IF 	getObjectProperty(ParkingUnit.parkingType)="ParallelParking"

       IF getObjectCount(Opening)>=2

       THEN  ParkingLot.Driveway.width>=3.3 m

       ELSE IF getObjectCount(Opening)=1

       THEN  ParkingLot.Driveway.width>=5.0 m

       END IF

   ELSE IF getObjectProperty(ParkingUnit.parkingType)="RightAngleParking"

       IF getObjectCount(Opening)>=2

       THEN  ParkingLot.Driveway.width>=6.0 m

       ELSE IF getObjectCount(Opening)=1

       THEN  ParkingLot.Driveway.width>=6.0 m

       END IF

   ELSE IF getObjectProperty(ParkingUnit.parkingType)="60AngleParking"

       IF getObjectCount(Opening)>=2

       THEN  ParkingLot.Driveway.width>=4.5 m

       ELSE IF getObjectCount(Opening)=1

       THEN  ParkingLot.Driveway.width>=5.5 m

       END IF

   ELSE IF getObjectProperty(ParkingUnit.parkingType)="45AngleParking"

       IF getObjectCount(Opening)>=2

       THEN  ParkingLot.Driveway.width>=3.5 m

       ELSE IF getObjectCount(Opening)=1

       THEN  ParkingLot.Driveway.width>=5.0 m

       END IF

getObjectProperty(ParkingUnit.parkingType)="CrossParking"

       IF getObjectCount(Opening)>=2

       THEN  ParkingLot.Driveway.width>=3.5 m

       ELSE IF getObjectCount(Opening)=1

       THEN  ParkingLot.Driveway.width>=5.0 m

       END IF

  END IF

} 




Python Code 변환 예정



80
주차장법 시행령 제 별표1조

부설주차장의 설치대상 시설물 종류 및 설치기준(제6조제1항 관련) (시설물 :설치기준) 1. 위락시설 :○ 시설면적 100㎡당 1대(시설면적/100㎡) 2. 문화 및 집회시설(관람장은 제외한다), 종교시설, 판매시설, 운수시설, 의료시설(정신병원·요양병원 및 격리병원은 제외한다), 운동시설(골프장·골프연습장 및 옥외수영장은 제외한다), 업무시설(외국공관 및 오피스텔은 제외한다), 방송통신시설 중 방송국, 장례식장 :○ 시설면적 150㎡당 1대(시설면적/





//주차장법 시행령 별표1 부설주차장의 설치대상 시설물 종류 및 설치기준





Check(EDPA_*_1_1){

IF CS THEN KS

}

Space mySpace1{

getBuildingUsage()=” AmusementFacility”

myTotalFloorArea = getTotalFloorArea(mySpace1)

CS{

isExist(mySpace1)=TRUE

} 

KS{

ParkingLot.numberOfParkingUnit<=myTotalFloorArea/100

}





Check(EDPA_*_1_2){

IF CS THEN KS

}

Space mySpace2{

(getBuildingUsage()= “CulturalAndAssemblyFacility”

AND getBuildingUsage() !=” Auditorium”)

OR (getBuildingUsage() = “ReligiousFacility | CommercialFacility | TransportationFacilit”

OR getBuildingUsage() = ”MedicalFacility”

AND getBuildingUsage() != “MentalHospital | ConvalescentHospital | DetentionHoispital”)

OR (getBuildingUsage() = “SportsFacility” 

AND getBuildingUsage() != “GolfCourse | GolfDrivingRange | OurdoorSwimmingPool”)

OR (getBuildingUsage()= “BusinessFacility”

AND getBuildingUsage() != “ForeignOfficialResidence | Officetels” )

}

myTotalFloorArea2 = getTotalFloorArea(mySpace2)

}

CS{

isExist(mySpace2)=TRUE

} 

KS{

ParkingLot.numberOfParkingUnit<=myTotalFloorArea2/150

}



Check(EDPA_*_1_3){

IF CS THEN KS

}

Space mySpace3{

 ((getBuildingUsage ()=” ClassINeighborhoodLivingFacility”

AND getSpaceUsage != “PublicToilet | Shelter | CommunityChildCenter”)

OR getBuildingUsage ()=”ClassIINeighborhoodLivingFacility”

OR getBuildingUsage ()=”LodgingFacility”)

}

myTotalFloorArea3 = getTotalFloorArea(mySpace3)

}

CS{

isExist(mySpace3)=TRUE

} 

KS{

ParkingLot.numberOfParkingUnit<=myTotalFloorArea3/200

}





Check(EDPA_*_1_4){

IF CS1 THEN KS1 OR CS2 THEN KS2

}

Space mySpace1{

getBuildingUsage ()=” DetachedHouse”

}

myTotalFloorArea = getTotalFloorArea(mySpace1)

}

CS1{

myTotalFloorArea>50 

AND myTotalFloorArea<=150

}

KS1{

isObjectProperty(parkingLot.numberofParkingUnit)=1

}

CS2{

myTotalFloorArea>150 

}

KS2{

(myTotalFloorArea-150)/100+1=ParkingLot.numberofParkingUnit

}





Check(EDPA_*_1_7){

IF CS THEN KS

}

Space mySpace7{

getBuildingUsage ()=”Trainingfacility” 

getBuildingUsage ()=”Factory”

getBuildingUsage () != ”AptartmentTypeFactory”

}

myTotalFloorArea7 = getTotalFloorArea(myspace7)

CS{

isExist(mySpace7)=TRUE

} 

KS{

ParkingLot.numberOfParkingUnit<=myTotalFloorArea7/400

}



Check(EDPA_*_1_8){

IF CS THEN KS

}

Space mySpace8{

getBuildingUsage ()= “Warehouse”

}

myTotalFloorArea8 = getTotalFloorArea(mySpace8)

}

CS{

isExist(mySpace8)=TRUE

} 

KS{

ParkingLot.numberOfParkingUnit<=myTotalFloorArea8/400

}



Check(EDPA_*_1_9){

IF CS THEN KS

}

Space mySpace9{

getBuildingUsage ()= “DormitoryForStudents”

}

myTotalFloorArea9 = getTotalFloorArea(myspace9)

CS{

isExist(mySpace9)=TRUE

} 

KS{

ParkingLot.numberOfParkingUnit<=myTotalFloorArea9/400

}





Check(EDPA_*_1_10){

IF CS THEN KS

}

Space mySpace10 { 

getObject(Space) != myspace1 | myspace2 | myspace3 | myspace4 | myspace5 | myspace6 | myspace7 | myspace8 | myspace9 |

}

myTotalFloorArea10 = getTotalFloorArea(mySpace10)

}

CS{

isExist(mySpace9)=TRUE

} 

KS{

ParkingLot.numberOfParkingUnit<=myTotalFloorArea10/300

}





Check(EDPA_*_1_0_1){

IF CS THEN KS

}

CS{

getResult(EDPA_*_1_0_1_가)= TRUE

OR getResult(EDPA_*_1_0_1_나)= TRUE

OR getResult(EDPA_*_1_0_1_다)= TRUE

OR getResult(EDPA_*_1_0_1_라)= TRUE

OR getResult(EDPA_*_1_0_1_마)= TRUE

OR getResult(EDPA_*_1_0_1_바)= TRUE

OR getResult(EDPA_*_1_0_1_사)= TRUE

}

KS{

isExist(ParkingLot.isAttachedParking)=FALSE

}



Check(EDPA_*_1_0_1_가){

KS

}

isExist(ClassINeighborhoodLivingFacility.Substation)=TRUE

OR isExist(ClassINeighborhoodLivingFacility.PumpingStation)=TRUE

OR isExist(ClassINeighborhoodLivingFacility.PurificationPlant)=TRUE

OR isExist(ClassINeighborhoodLivingFacility.Shelter)=TRUE

OR isExist(ClassINeighborhoodLivingFacility.PublicToilet)=TRUE

Check(EDPA_*_1_0_1_나){

KS

}

isExist(ReligiousFacility.Monastery)=TRUE

OR isExist(ReligiousFacility.Convent)=TRUE

OR isExist(ReligiousFacility.Chapel)=TRUE

OR isExist(ReligiousFacility.Shrine)=TRUE

Check(EDPA_*_1_0_1_다){

KS

}

isExist(getBuildingUsage()=”FacilityForAnimalAndPlant”)=TRUE

AND isExist(getBuildingUsage()=”SlaughterHouse”)=FALSE

AND isExist(getBuildingUsage()=”ChickenSlaughterHouse”)=FALSE

Check(EDPA_*_1_0_1_라){

KS

}

isExist(FacilityForBroadcastingAndTelecommunication.TransmitAndReceptionAndTransitFacility)=TRUE

Check(EDPA_*_1_0_1_마){

KS

}

getObjectProperty(Building.isExclusiveUseOfParkingLot) = FALSE

(getBuildingUsage() != "CommercialFacility.DepartmentStore" OR "CommercialFacility.ShoppingCenter" OR  "LargeStore"

OR getBuildingUsage() != "CulturalAndAssemblyFacility.MovieTheater" OR  "CulturalAndAssemblyFacility.ExhibitionHall" OR "CulturalAndAssemblyFacility.WeddingHall"

Check(EDPA_*_1_0_1_바){

KS

}

getBuildingUsage()= “Station”

Check(EDPA_*_1_0_1_사){

KS

}

getResult(EDBA_6_1_4)=TRUE









Check(EDPA_*_1_0_4){

KS

}

Space mySpace{

getBuildingUsage()= “DetachedHouse”

getBuildingUsage() !=”Multi-familyHouses”

}

getTotalArea(mySpace)<=50m2

getTotalArea(mySpace)/100 = ParkingLot.numberOfParkingUnit 




Python Code 변환 예정



81
주택건설기준 등에 관한 규정 제 15조 3 항 3호

3. 계단실형인 공동주택의 경우에는 계단실마다 설치할 것





//주택건설기준 등에 관한 규정 15조 (승강기등) 3항 3호
Check(RHC_15_3_3){
	IF CS THEN KS
}

CS{
	
}

KS{
	Elevator myElevator{
		getObjectProperty(Elevator.usage) = "FreightElevator"
	}

	isInstalled(myElevator, Stair.Space) = TRUE
} 




Python Code 변환 예정



82
주택건설기준 등에 관한 규정 제 11조

제11조(지하층의 활용) 공동주택을 건설하는 주택단지에 설치하는 지하층은 「주택법 시행령」 제7조제1호 및 제2호에 따른 근린생활시설(이하 "근린생활시설"이라 한다. 다만, 이 조에서는 변전소ㆍ정수장 및 양수장을 제외하되, 변전소의 경우 「전기사업법」 제2조제2호에 따른 전기사업자가 자신의 소유 토지에 「전원개발촉진법 시행령」 제3조제1호에 따른 시설의 설치ㆍ운영에 종사하는 자를 위하여 건설하는 공동주택 및 주택과 주택 외의 건축물을 동일건축물에 복합하여 건설하는 경우로서 사업계획승인권자가 주거안정에 지장이 없다고 인정하는 건축물의 변전소는 포함한다)ㆍ주차장ㆍ주민공동시설 및 주택(사업계획승인권자가 해당 주택의 주거환경에 지장이 없다고 인정하는 경우로서 1층 세대의 주거전용부분으로 사용되는 구조만 해당한다) 그 밖에 관계 법령에 따라 허용되는 용도로 사용할 수 있으며, 그 구조 및 설비는 「건축법」제53조에 따른 기준에 적합하여야 한다. <개정 2005.6.30, 2006.1.6, 2008.10.29, 2009.10.19, 2013.6.17, 2017.10.17>





//주택건설기준 등에 관한 규정 11조 (지하층의 활용) 

Check(RHC_11){
     IF CS THEN KS
}

CS{
   
   getBuildingUsage()="	MultiUnitHouse"
   getFloorNumber(Space)<0
}

KS{
    getResult(BA_53)=True
} 




Python Code 변환 예정



83
주택법 시행령 제 47조 5 항

⑤ 감리자는 법 제16조제2항에 따라 착공신고를 하거나 감리업무의 범위에 속하는 각종 시험 및 자재확인 등을 하는 경우에는 서명 또는 날인을 하여야 한다.





//주택법 시행령 47조 (행위허가 등의 기준 등) 5항
Check(NFSC506_47_5){
	IF !CS THEN KS
}

CS{
	getBuildingUsage() = "MultiUnitHouse"
	getObjectProperty(Floor.number) < 0
}

KS{
	Floor myFloor{
		getObjectProperty(Floor.number) < 0
	}

	getFloorUsage(myFloor) != "ResidentsCommonSpace"
} 




Python Code 변환 예정



  ◁prev 1   2