④ 기숙사, 오피스텔은 별표1 및 별표3의 공동주택 외의 단열기준을 준수할 수 있으며, 별지 제1호서식의 에너지성능지표 작성 시, 기본배점에서 비주거를 적용한다.
// 간이스프링클러설비의 화재안전기준(NFSC 103A) 별표1 (간이헤드 수별 급수관의 구경) 1항
Check(NFSC103A_*_1){
getResult(NFSC103A_*_1_1) = TRUE
getResult(NFSC103A_*_1_2) = TRUE
getResult(NFSC103A_*_1_3) = TRUE
getResult(NFSC103A_*_1_4) = TRUE
}
Pipe myPipe{
getObjectProperty(Pipe.usage) = "WaterSupplyPipe"
}
Pipe myPipe2{
isObjectProperty(Pipe.isBranchLines) = TRUE
}
PD = getObjectProperty(Pipe.diameter)
SSHN = getObjectCount(SimpleSprinkler.Head.)
Check(NFSC103A_*_1_2){
IF CS THEN KS
}
CS{
Head myHead{
getObjectProperty(SimpleSprinkler.Head.openAndCloseType) = "EnclosedType"
}
isInstalled(myHead) = TRUE
}
KS{
IF PD = 25 THEN SSHN = 2
OR IF PD = 32 THEN SSHN = 3
OR IF PD = 40 THEN SSHN = 5
OR IF PD = 50 THEN SSHN = 10
OR IF PD = 65 THEN SSHN = 30
OR IF PD = 80 THEN SSHN = 60
OR IF PD = 100 THEN SSHN = 100
OR IF PD = 125 THEN SSHN = 160
OR IF PD = 150 THEN SSHN >= 161
}
Check(NFSC103A_*_1_3){
IF CS THEN KS
}
CS{
Head myHead1{
getObjectProperty(SimpleSprinkler.Head.openAndCloseType) = "EnclosedType"
}
isInstalled(myHead1) = TRUE
Head myHead2{
getObjectVerticalLocation(Head, CeilingCovering, ) < 0
}
Head myHead3{
isInstalled(Head, CeilingCovering.Inside) = TRUE
}
isInstalled(myHead2, myPipe2) = TRUE
isInstalled(myHead3, myPipe2) = TRUE
}
KS{
IF PD = 25 THEN SSHN = 2
OR IF PD = 32 THEN SSHN = 4
OR IF PD = 40 THEN SSHN = 7
OR IF PD = 50 THEN SSHN = 15
OR IF PD = 65 THEN SSHN = 30
OR IF PD = 80 THEN SSHN = 60
OR IF PD = 100 THEN SSHN = 100
OR IF PD = 125 THEN SSHN = 160
OR IF PD = 150 THEN SSHN >= 161
}
1. 높이가 3미터를 넘는 계단에는 높이 3미터이내마다 너비 1.2미터 이상의 계단참을 설치할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 1항1호
check(REFB_15_1_1){
IF CS THEN KS
}
CS{
getObjectHeight(Stair)>3 m
}
KS{
isExist(StairLanding )= TRUE
getPaceWidth(StairLanding>=1.2 m
getObjectCount(StairLanding)>=getObjectCount(getObjectCount(StairLanding))/3
IF getObjectCount(StairLanding)>1
THEN getObjectVerticalDistance(StairLanding ,StairLanding)>3 m
END IF
}
def Check():
for building in SELECT('building'):
for stair in building.SELECT('stair'):
st_h = stair.SELECT('height').UNIT('m')
st_h_num = height.NUMBER()
if st_h_num >= 3:
elv1 = stair.SELECT('elevation').UNIT('m').NUMBER()
elv2 = elv1
for width in stair.SELECT("clear landing width"):
elv2 = width.SELECT('elevation').UNIT('m').NUMBER()
if elv2 - elv1 > 3:
stair.ERROR('3m 이내마다 계단참이 존재하지 않습니다.')
breaker = True
break
elv1 = elv2
w = width.UNIT('m').NUMBER()
if w < min_w:
width.ERROR('계단참 유효너비: ' + str(w) + ' < ' + str(min_w))
else:
width.SUCCESS('계단참 유효너비: ' + str(w) + ' >= ' + str(min_w))
3. 너비가 3미터를 넘는 계단에는 계단의 중간에 너비 3미터 이내마다 난간을 설치할 것. 다만, 계단의 단높이가 15센티미터 이하이고, 계단의 단너비가 30센티미터 이상인 경우에는 그러하지 아니하다.
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 1항3호
check(REFB_15_1_3){
IF !CS THEN KS
}
CS{
getStairStepHeight()<=15 cm
getStairStepWidth()>=30 cm
}
KS{
IF getObjectWidth(Stair)>=3 m
THEN hasObject(Stair, Railing) = TRUE
N=getObjectWidth(Stair)/3
getObjectCount(Railing)>=N
IF N>1
THEN getObjectDistance(Railing,Railing)<3 m
END IF
END IF
}
def Check():
for building in SELECT('building'):
for stair in building.SELECT('stair'):
st_w = stair.SELECT('width').UNIT('m')
st_w_num = height.NUMBER()
if st_w_num >= 3:
for riser_height in stair.SELECT('riser height'):
riser_h_num = riser_height.UNIT('mm').NUMBER()
if riser_h_num <= 15:
braker = True
break
for riser_width in stair.SELECT('riser width'):
riser_w_num = riser_width.UNIT('mm').NUMBER()
if riser_w_num >= 30:
braker = True
break
if braker is True:
break
else:
pass
# 3미터 이내마다 난간 설치 확인을 위하여 난간간 간격 파악 필요
2. 하나의 층에 개별 관람석(바닥면적이 300제곱미터 미만인 경우에 한한다)을 2개소 이상 연속하여 설치하는 경우에는 그 관람석의 바깥쪽의 앞쪽과 뒤쪽에 각각 복도를 설치할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조의2 (복도의 너비 및 설치기준) 3항2호
Check(REFB_15-2_3_2){
IF CS THEN KS
}
CS{
Space mySpace{
getSpaceUsage(Space)="IndividualAuditorium"
}
getFloorArea(mySpace)>300 m2
getObjectCount(Floor.One.mySpace)>=2
}
KS{
}
corridor_code = '33105'
theater_code = '00000'
std_floor_area = 200
corridor_code_label = '복도 공간분류코드'
theater_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 == '공연장'):
continue
for storey in building.SELECT('storey'):
for space in storey.SELECT('space'):
if space.SELECT('class code').STRING() != theater_code:
continue
area = space.SELECT('area').UNIT('m2').NUMBER()
side_corridors = []
fb_corridors = []
for s in space.SELECT('side space'):
if s.SELECT('class code').STRING() == corridor_code:
side_corridors.append(s)
for s in space.SELECT('front back space'):
if s.SELECT('class code').STRING() == corridor_code:
fb_corridors.append(s)
if area >= 300:
if len(side_corridors) + len(fb_corridors) < 3:
space.ERROR('관람석의 양쪽과 뒤쪽 중 복도가 존재하지 않는 곳이 있습니다.')
else:
space.SUCCESS('관람석의 양쪽과 뒤쪽에 복도가 존재합니다.')
else:
if len(side_corridors) == 2 or len(fb_corridors) == 2:
space.SUCCESS('관람석의 앞뒤쪽에 복도가 존재합니다.')
else:
space.ERROR('관람석의 앞뒤쪽 중 복도가 존재하지 않는 곳이 있습니다.')
1의2. 제2종근린생활시설 중 공연장·단란주점·당구장·노래연습장, 문화 및 집회시설중 예식장·공연장, 수련시설 중 생활권수련시설·자연권수련시설, 숙박시설중 여관·여인숙, 위락시설중 단란주점·유흥주점 또는 「다중이용업소의 안전관리에 관한 특별법 시행령」 제2조에 따른 다중이용업의 용도에 쓰이는 층으로서 그 층의 거실의 바닥면적의 합계가 50제곱미터 이상인 건축물에는 직통계단을 2개소 이상 설치할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 25조 (지하층의 구조) 1항 1의2호
check(REFB_25_1_1-2){
IF CS THEN KS
}
CS{
(getBuildingUsage() = "ClassIINeighborhoodLivingFacility.PerformanceHall"
OR getBuildingUsage() = "ClassIINeighborhoodLivingFacility.Pubs"
OR getBuildingUsage() = "ClassIINeighborhoodLivingFacility.BilliardRoom"
OR getBuildingUsage() = "ClassIINeighborhoodLivingFacility.Karaoke"
OR getBuildingUsage() = "CulturalAndAssemblyFacility.WeddingHall"
OR getBuildingUsage() = "CulturalAndAssemblyFacility.PerformanceHall"
OR getBuildingUsage() = "TrainingFacility.TrainingFacilityInLivingZone"
OR getBuildingUsage() = "TrainingFacility.??LivingZone"
OR getBuildingUsage() = "LodgingFacility.Inn"
OR getBuildingUsage() = "AmusementFacility.Pubs"
OR getBuildingUsage() = "AmusementFacility.Tavern"
OR getResult(ERSASP_2) = TRUE)
getTotalFloorArea(Room) >= 50 m2
}
KS{
Stair myStair{
isObjectProperty(Stair.isDirect) = TRUE
}
getObjectCount(myStair) >= 2
}
2. 높이 31미터를 넘는 각 층의 바닥면적 중 최대 바닥면적이 1천500제곱미터를 넘는 건축물: 1대에 1천500제곱미터를 넘는 3천 제곱미터 이내마다 1대씩 더한 대수 이상
//건축법 시행령 90조 (비상용 승강기의 설치) 1항2호
Check(EDBA_1_2){
IF CS THEN KS
}
Floor myFloor{
getObjectHeight(Floor)>31 m
}
CS{
getFloorArea(myFloor)>1500 m2
}
KS{
FA=getFloorArea(myFloor) //FA means floor area
IF FA>=4500 m2
THEN {(FA-1500)/3000}+1 < getObjectCount(EmergencyElevator)
getObjectCount(EmergencyElevator) < {(FA-1500)/3000}+2
END IF
}
⑤ 건축물의 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
}
다. 송수구가 부설된 옥내소화전을 설치한 특정소방대상물(집회장·관람장·백화점·도매시장·소매시장·판매시설·공장·창고시설 또는 지하가를 제외한다)로서 다음의 어느 하나에 해당하는 층
(1) 지하층을 제외한 층수가 4층 이하이고 연면적이 6,000㎡ 미만인 특정소방대상물의 지상층
(2) 지하층의 층수가 2 이하인 특정소방대상물의 지하층
나. 방사형 관창은 단구형 방수구의 경우에는 1개, 쌍구형 방수구의 경우에는 2개 이상 비치할 것
//연결송수관설비의 화재안전기준(NFSC 502) 7조 (방수기구함) 2호 나목
Check(NFSC502_7_0_2_나){
KS
}
KS{
IF getObjectPropety(RadialSprayNozzle.Port.shapeType)="SingleType"
THEN getObjectCount(RadialSprayNozzle)=1
ELSE IF getObjectPropety(RadialSprayNozzle.Port.shapeType)="DoubleType"
getObjectCount(RadialSprayNozzle)=2
END IF
}
//주차장법 시행규칙 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
}
//주차장법 시행규칙 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
}
①6층 이상인 공동주택에는 국토교통부령이 정하는 기준에 따라 대당 6인승 이상인 승용승강기를 설치하여야 한다. 다만, 「건축법 시행령」 제89조의 규정에 해당하는 공동주택의 경우에는 그러하지 아니하다. <개정 1992.5.30, 1994.12.23, 1994.12.30, 1999.9.29, 2005.6.30, 2008.2.29, 2013.3.23>
//주택건설기준 등에 관한 규정 15조 (승강기등) 1항
Check(RHC_15_1){
getResult(RHC_15_5) = TRUE AND IF (CS1 AND !CS2) THEN KS
}
CS1{
getBuildingUsage() = "MultiUnitHouse"
getBuildingStoriesCount() >= 6
}
CS2{
getBuildingStoriesCount = 6
Stair myStair{
isObjectProperty(Stair.isDirect) = TRUE
}
getFloorArea() = FA
FA / 300 = FA2
getIntegeralNumber(FA2) = FA3
getObjectCount(myStair) >= FA3
}
KS{
Elevator myElevator{
getObjectProperty(Elevator.occupancy) >= 6
}
isExist(myElevator) = TRUE
}
4. 복도형인 공동주택의 경우에는 100세대까지 1대를 설치하되, 100세대를 넘는 경우에는 100세대마다 1대를 추가로 설치할 것
//주택건설기준 등에 관한 규정 15조 (승강기등) 3항 4호
Check(RHC_15_3_4){
IF CS THEN KS
}
CS{
}
KS{
Elevator myElevator{
getObjectProperty(Elevator.usage) = "FreightElevator"
}
getObjectCount(myElevator) = ELV
100*n <= getObjectProperty(Building.numberOfHousehold) <100*(n+1)
n <= ELV
}