Merge remote-tracking branch 'origin/sub_laptop_1' into main_laptop_1

This commit is contained in:
2026-11-04 13:21:19 +09:00
14 changed files with 947 additions and 599 deletions
+128 -128
View File
@@ -26,56 +26,56 @@
}
},
"S2": {
"단산:46|레미콘타설(장비사용)|철근구조물-소량타설|m3": "14b94bd44235",
"단산:46|레미콘타설(장비사용)|철근구조물-소량타설|m3": "fe6524b2bf88",
"단산:24|합판거푸집|4회|m2": "dc9227913b7d",
"단산:33|기초잡석채집,운반,다짐|발파암활용,덤프15톤,l=500m|m3": "569f93218071",
"단산:33|기초잡석채집,운반,다짐|발파암활용,덤프15톤,l=500m|m3": "53d20022ff32",
"단산:47|철근가공조립(현장)|type-i(소량시공)|톤": "f333a56a3d0e",
"단산:6|야면석채집및운반(계곡내)|굴삭기0.6m3,35cm,4.5톤,l=500m|m2": "06a8c10d89e7",
"단산:3|고임돌채집및운반|굴삭기0.6m3(90%),4.5톤,l=500m|m3": "4c1b4b4cb599",
"단산:10|야면석소운반|l=35cm|m2": "e96d400b173b",
"단산:39|야면석찰붙임|l3=35cm적용,장비사용|m2": "e781e3163b81",
"단산:6|야면석채집및운반(계곡내)|굴삭기0.6m3,35cm,4.5톤,l=500m|m2": "c0521e16ff75",
"단산:3|고임돌채집및운반|굴삭기0.6m3(90%),4.5톤,l=500m|m3": "2521254f68a8",
"단산:10|야면석소운반|l=35cm|m2": "50eb93121621",
"단산:39|야면석찰붙임|l3=35cm적용,장비사용|m2": "cf4739ae6e8c",
"단산:93|구조물터파기(인력100%)|토사|m3": "c523b43c617b",
"단산:12|구조물되메우기(인력100%)||m3": "559c125ef42e",
"단산:13|잔토처리(인력100%)||m3": "eb0395c76e02",
"단산:22|레미콘타설(장비사용)|무근구조물|m3": "0c3cebbe76de",
"단산:22|레미콘타설(장비사용)|무근구조물|m3": "12555a58e991",
"단산:26|유로폼|보통,0~7m|m2": "a301adcd84cd",
"단산:18|문양거푸집||m2": "9f4efb5510bf",
"단산:37|p.v.c파이프설치|ø50mm|m": "a408f8e02b28",
"단산:38|다웰바설치|ø32x1000|개": "13410747be6e",
"단산:41|휠라설치|t=15mm,1000x1500mm|m2": "4df1b309aca4",
"단산:41|휠라설치|t=15mm,1000x1500mm|m2": "23bf202fc7a4",
"단산:29|철근가공조립(현장)|연결철근,type-ix30%적용|톤": "2b96b0b322d2",
"단산:30|큰돌채집운반|공사중발생석활용50%적용|m2": "a0d7114b5599",
"단산:32|큰돌쌓기(메쌓기)|직경40cm이상~60cm미만|m2": "06881edcaad6",
"단산:2|뒷채움돌채집운반뒷채움(발파)|굴삭기0.6m3(90%),4.5톤,l=500m|m3": "8d60db527bae",
"단산:31|큰돌쌓기(찰쌓기)_배수공|직경40cm이상~60cm미만|m2": "c0610580cae7",
"단산:30|큰돌채집운반|공사중발생석활용50%적용|m2": "66cb28bdab1c",
"단산:32|큰돌쌓기(메쌓기)|직경40cm이상~60cm미만|m2": "0d884c7f218d",
"단산:2|뒷채움돌채집운반뒷채움(발파)|굴삭기0.6m3(90%),4.5톤,l=500m|m3": "ec132e6186ae",
"단산:31|큰돌쌓기(찰쌓기)_배수공|직경40cm이상~60cm미만|m2": "b4e9d2ee8233",
"단산:21|레미콘타설(인력운반)|무근구조물-소량타설|m3": "7ee6fe1e8d9d",
"단산:25|합판거푸집|6회|m2": "b5b6ec2a0beb",
"단산:42|도로반사경설치|d=1000(sts)|개소": "e521922cb4ba",
"단산:88|야면석메붙임|l3=35cm내외,장비사용|m2": "91ac9e8d76f7",
"단산:92|큰돌메붙임|직경40cm이상~60cm미만|m2": "26e6c1b118c5",
"단산:91|큰돌찰붙임|직경40cm이상~60cm미만|m2": "bd288a8d830f",
"단산:57|레미콘타설(장비사용)|소형구조물|m3": "b4bee2367968",
"단산:71|야면석찰쌓기|l3=35cm적용,장비사용|m2": "1649ce3151fb",
"단산:43|면고르기||m2": "f45d3e3af178",
"단산:42|도로반사경설치|d=1000(sts)|개소": "3c2ee04632d3",
"단산:88|야면석메붙임|l3=35cm내외,장비사용|m2": "fbc297bd41b0",
"단산:92|큰돌메붙임|직경40cm이상~60cm미만|m2": "d1fad346524d",
"단산:91|큰돌찰붙임|직경40cm이상~60cm미만|m2": "269c2c76c667",
"단산:57|레미콘타설(장비사용)|소형구조물|m3": "9038aaf1131e",
"단산:71|야면석찰쌓기|l3=35cm적용,장비사용|m2": "e74767626ed4",
"단산:43|면고르기||m2": "ec9f5d99380f",
"줄:대형브레이카|+굴착기(0.7m3)|시간": "fc11668f29eb",
"단산:60|와이어메시바닥깔기|#6100x100|m2": "567c16874a89",
"단산:62|원형돌망태설치및돌채움|#8,45x45cm|m2": "9ad93f86f385",
"단산:61|조약돌채집및운반|굴삭기0.6m3(90%),4.5톤,l=500m|m3": "ab7d8e14de22",
"단산:63|돌망태형옹벽설치|사각돌망태|m2": "6487dbf12ab6",
"단산:65|콘크리트포장(인력)|t=20cm,종단15%미만|m3": "2c48d8cc2468",
"단산:61|조약돌채집및운반|굴삭기0.6m3(90%),4.5톤,l=500m|m3": "b07780f6fab7",
"단산:63|돌망태형옹벽설치|사각돌망태|m2": "61535c440543",
"단산:65|콘크리트포장(인력)|t=20cm,종단15%미만|m3": "14fb1320b388",
"단산:64|비탈면보호공|평떼|m2": "5d9d68fa8679",
"단산:66|콘크리트포장(인력)|t=20cm,종단15%이상|m3": "2374789b6ae0",
"단산:70|고화매트설치||m2": "80be3cc78047",
"단산:90|큰돌쌓기(찰쌓기)|직경40cm이상~60cm미만|m2": "52a0f47bb751",
"단산:23|레미콘타설(장비사용)|철근구조물|m3": "fe0d22d627da",
"단산:66|콘크리트포장(인력)|t=20cm,종단15%이상|m3": "4739d20909b5",
"단산:70|고화매트설치||m2": "61d7220158c9",
"단산:90|큰돌쌓기(찰쌓기)|직경40cm이상~60cm미만|m2": "8efce35c90b3",
"단산:23|레미콘타설(장비사용)|철근구조물|m3": "4814d3d0bb6f",
"단산:73|강관동바리|암거용-1개월사용|공/m3": "bc3f5092d701",
"단산:72|철근가공조립(현장)|type-ll|톤": "75dda2f569a2",
"단산:74|강관비계|10m이하,3개월사용|m2": "90ce7f0da95c",
"단산:49|흙깍기(토사)|굴삭기1.0m3,보통토사|m3": "f9aea56b06bf",
"단산:56|잔토정리|굴삭기0.6m3|m3": "9f76f0e32710",
"단산:49|흙깍기(토사)|굴삭기1.0m3,보통토사|m3": "a893fe169785",
"단산:56|잔토정리|굴삭기0.6m3|m3": "63177d8c31eb",
"단산:82|잡철물제작설치|규격철물설치(일반철재)|톤": "531650fd115f",
"단산:95|도장(철재면2회)|방청1,유성2|m2": "92867210fce0",
"단산:81|임도안전표지판설치|삼각,900mm|개소": "ee09c0727967"
"단산:81|임도안전표지판설치|삼각,900mm|개소": "b28761e99520"
}
},
"북부청사방": {
@@ -106,8 +106,8 @@
}
},
"S2": {
"단산:22|레미콘타설(장비사용)|철근구조물|m3": "e2940f403c6c",
"단산:20|레미콘타설(장비사용)|무근구조물|m3": "d0347d9e519e",
"단산:22|레미콘타설(장비사용)|철근구조물|m3": "a35e3f7819d4",
"단산:20|레미콘타설(장비사용)|무근구조물|m3": "6caceddb40b1",
"단산:38|유로폼(euroform)|6회,보통|m2": "0cd2081fa29f",
"단산:53|철근가공조립(현장)|type-ii|톤": "d6d92c499d78",
"단산:4|강관비계|(10m이하)|m2": "7c1c9f2d283a",
@@ -115,44 +115,44 @@
"단산:37|유로폼(euroform)|6회,간단|m2": "d6ac6fccfcfd",
"단산:52|철근가공조립(현장)|type-i(소량)|톤": "e3d8470f9851",
"단산:49|철강재운반(할증포함)|(구역화물)|톤": "a619ce7fe816",
"단산:51|철골설치||톤": "8e292d7859f8",
"단산:50|철골가공조립(공장)|(대형)|톤": "b386a69202ef",
"단산:51|철골설치||톤": "f8b5b9b49bf5",
"단산:50|철골가공조립(공장)|(대형)|톤": "ebe8740e0a1e",
"단산:42|잡철물제작||톤": "ef730a79e03f",
"단산:67|합판거푸집(6회)||m2": "b3ba20147436",
"단산:33|와이어메시바닥깔기||m2": "2f898ef1909d",
"단산:11|구조물터파기(토사)||m3": "5b2c549e3ec2",
"단산:8|구조물되메우기및다짐||m3": "184c85a346db",
"단산:39|잔토처리||m3": "147afeac7acd",
"단산:21|레미콘타설(장비사용)|무근구조물-소량타설|m3": "6b7edafbfd22",
"단산:11|구조물터파기(토사)||m3": "d104c4f35461",
"단산:8|구조물되메우기및다짐||m3": "4b834cdae99f",
"단산:39|잔토처리||m3": "62e430cfb337",
"단산:21|레미콘타설(장비사용)|무근구조물-소량타설|m3": "32bb4fda75e2",
"단산:66|합판거푸집(4회)||m2": "39bdcddca57c",
"단산:12|기초잡석다짐및채집운반|(9:1)(0.6m3+4.5ton)|m3": "dc7a46817506",
"단산:26|배수관부설|(d=1000mm)|m": "e6f492785d36",
"단산:12|기초잡석다짐및채집운반|(9:1)(0.6m3+4.5ton)|m3": "24dcf4cf1ac0",
"단산:26|배수관부설|(d=1000mm)|m": "7c06bc3e3a91",
"호표:7": "9238de708278",
"단산:19|레미콘타설(인력운반)|무근구조물-소량타설|m3": "728a28bc9224",
"단산:9|구조물터파기|인력|m3": "06855a4c159a",
"단산:7|구조물되메우기|인력|m3": "8d23c8175496",
"단산:40|잔토처리|인력|m3": "e62dedcec317",
"단산:40|잔토처리|인력|m3": "e488fa518c11",
"단산:35|원형돌망태조립설치|산림사업품셈|조": "05d490e21236",
"단산:36|원형돌망태채움|산림사업품셈|조": "a4b290a399fd",
"단산:43|조약돌채집운반|(9:1)(0.6m3+4.5ton)|m3": "3d10f7bb409b",
"단산:10|구조물터파기(암)||m3": "884a1241cb59",
"단산:27|배수관부설|(d=500mm)|m": "e00f055d8b21",
"단산:18|레미콘타설(무근펌프카)(130m3)|41m(80-95m3/hr)|m3": "07d3e7ce5cf4",
"단산:36|원형돌망태채움|산림사업품셈|조": "c8e1f0314e45",
"단산:43|조약돌채집운반|(9:1)(0.6m3+4.5ton)|m3": "1cc5362dc3b4",
"단산:10|구조물터파기(암)||m3": "0d821feb9c44",
"단산:27|배수관부설|(d=500mm)|m": "964f47b3dd45",
"단산:18|레미콘타설(무근펌프카)(130m3)|41m(80-95m3/hr)|m3": "6da4e3284f73",
"줄:콘크리트펌프차|41m,80~95m3/hr|시간": "6dfaed1dd20a",
"단산:25|문양거푸집||m2": "fba1f776a83c",
"단산:46|지수판설치|산림사업품셈|m": "3ddb72dcd81d",
"단산:1|p.v.c파이프설치|산림사업품셈|m": "ec1cd531e2e6",
"단산:17|떼붙임(평떼)|산림사업품셈|m2": "fdd2e6bd02f0",
"단산:60|큰돌메쌓기|40cm-60cm,(산림사업품셈)|m2": "b44908334fae",
"단산:5|고임돌채집및운반|(9:1)(0.6m3+4.5ton)|m3": "6d67aa013e60",
"단산:16|뒷채움잡석채집운반다짐|(9:1)(0.6m3+4.5ton)|m3": "2f37d4203fdc",
"단산:62|큰돌찰쌓기|40cm-60cm,(산림사업품셈)|m2": "6b65c0b531df",
"단산:63|큰돌채집운반|산림사업품셈|m2": "09662a8f8d36",
"단산:13|뒷채움잡석구입운반||m3": "797df59d7756",
"단산:15|뒷채움잡석뒷채움||m3": "012a67631d07",
"단산:14|뒷채움잡석구입운반|(창봉기번3)(2차)|m3": "42b81776b3e4",
"단산:59|큰돌메붙임|40cm-60cm,(산림사업품셈)|m2": "cc09e80f4533",
"단산:61|큰돌찰붙임|40cm-60cm,(산림사업품셈)|m2": "469d3c56b621"
"단산:17|떼붙임(평떼)|산림사업품셈|m2": "0319c3fc3b39",
"단산:60|큰돌메쌓기|40cm-60cm,(산림사업품셈)|m2": "83f1a9a2b201",
"단산:5|고임돌채집및운반|(9:1)(0.6m3+4.5ton)|m3": "6f841c019f4e",
"단산:16|뒷채움잡석채집운반다짐|(9:1)(0.6m3+4.5ton)|m3": "eb182b275f99",
"단산:62|큰돌찰쌓기|40cm-60cm,(산림사업품셈)|m2": "3045ba240634",
"단산:63|큰돌채집운반|산림사업품셈|m2": "35a75e3957bb",
"단산:13|뒷채움잡석구입운반||m3": "c425998ad058",
"단산:15|뒷채움잡석뒷채움||m3": "f9d5674557e8",
"단산:14|뒷채움잡석구입운반|(창봉기번3)(2차)|m3": "8a37a388d59a",
"단산:59|큰돌메붙임|40cm-60cm,(산림사업품셈)|m2": "1aefe1f21b3b",
"단산:61|큰돌찰붙임|40cm-60cm,(산림사업품셈)|m2": "b140bb188ade"
}
},
"거창": {
@@ -188,26 +188,26 @@
"호표:1": "1f6345e0085e",
"호표:2": "dacbaeeaa6c9",
"호표:3": "03d873100e35",
"단산:30|유로폼|보통,0~7m|m2": "e278a75b7213",
"단산:38|철근가공및조립(현장)|type-ii-1|톤": "4ea51eae487f",
"단산:39|강관비계|10m이하(3개월)|m2": "769cb5147b54",
"단산:29|유로폼|간단,0~7m|m2": "dcf229abaa91",
"단산:30|유로폼|보통,0~7m|m2": "8e45789b4266",
"단산:38|철근가공및조립(현장)|type-ii-1|톤": "f65df34c4c3e",
"단산:39|강관비계|10m이하(3개월)|m2": "a96380c10324",
"단산:29|유로폼|간단,0~7m|m2": "cb2624477569",
"호표:10": "fc2cc4cd2868",
"호표:11": "998a0263fed9",
"단산:36|레미콘타설(장비사용타설)|무근구조물|m3": "39982206412d",
"단산:40|레미콘타설(장비사용타설)|철근구조물|m3": "41c11b60b1e1",
"단산:41|합판거푸집|4회|m2": "dfd5ab302d05",
"단산:36|레미콘타설(장비사용타설)|무근구조물|m3": "c0b9cfa60d77",
"단산:40|레미콘타설(장비사용타설)|철근구조물|m3": "198ef508476c",
"단산:41|합판거푸집|4회|m2": "965f0578c65a",
"단산:31|철근가공및조립(현장)|type-i-1(소형)|톤": "a98e998b35c0",
"단산:42|강관동바리|2.5m이하(1개월)|공m3": "99d65ebd3dcc",
"단산:43|잡철물제작및설치(현장)|일반철재|톤": "71c1f965449f",
"단산:44|안내표지판설치|단주식|개소": "38427ebd6d28",
"단산:42|강관동바리|2.5m이하(1개월)|공m3": "15e8a1fae939",
"단산:43|잡철물제작및설치(현장)|일반철재|톤": "9803bb826c42",
"단산:44|안내표지판설치|단주식|개소": "3c6f75841d3b",
"단산:37|레미콘타설(인력운반타설)|소형구조물|m3": "6c2df8e4fd6a",
"단산:45|합판거푸집|6회,간단|m2": "85dcc3e13e28"
"단산:45|합판거푸집|6회,간단|m2": "ec2e16734886"
}
},
"봉화": {
"S1": {
"해시": "fcf03906734a",
"해시": "4c3ba7796291",
"꼴": "STmate",
"호표": 45,
"줄": 209,
@@ -236,36 +236,36 @@
"S2": {
"줄:굴삭기(타이어)|0.6m3,(부착용집게)|시간": "7ba959ec2e9d",
"호표:1": "ee8a116be0f0",
"단산:96|레미콘타설(장비)|무근,소형|m3": "fcbfc0642dc2",
"단산:96|레미콘타설(장비)|무근,소형|m3": "fed15560be74",
"단산:102|합판거푸집(간단)|간단|m2": "70042bc48cb6",
"단산:4|글자새김|자당6x6|자": "ff7e1309d192",
"단산:2|구조물터파기(토사)|굴삭기0.2m3|m3": "2ce888963761",
"단산:7|구조물되메우기|굴삭기0.2m3|m3": "c72b4a1494d6",
"단산:49|잔토처리|굴삭기0.2m3|m3": "800b67112b8d",
"단산:2|구조물터파기(토사)|굴삭기0.2m3|m3": "cbead3149b3c",
"단산:7|구조물되메우기|굴삭기0.2m3|m3": "3ff7d6c09304",
"단산:49|잔토처리|굴삭기0.2m3|m3": "bc633bad0c98",
"호표:5": "566b3ec95fef",
"단산:43|깬잡석채집|l=45cm내외|m2": "6c67d6e7d946",
"단산:5|고임돌채집|기계(0.7m3,100%)|m3": "304739062d51",
"단산:6|막자갈채집|기계(0.7m3,100%)|m3": "b149f96f7918",
"단산:8|기초다짐및뒤채움|소형장비사용시공|m3": "d1e2a67c4989",
"단산:43|깬잡석채집|l=45cm내외|m2": "9382675c6d66",
"단산:5|고임돌채집|기계(0.7m3,100%)|m3": "e6a8fdb7c927",
"단산:6|막자갈채집|기계(0.7m3,100%)|m3": "d862c41aa425",
"단산:8|기초다짐및뒤채움|소형장비사용시공|m3": "77b469a4fd17",
"단산:93|유로폼설치및해체|간단|m2": "5174b34972ac",
"단산:95|레미콘타설(장비)|무근|m3": "1e45fdfca996",
"단산:89|콘크리트믹서사용|0.45m3|m3": "71825ddc35da",
"단산:95|레미콘타설(장비)|무근|m3": "bff32ab35cc6",
"단산:89|콘크리트믹서사용|0.45m3|m3": "1538c2627ebb",
"단산:94|유로폼설치및해체|보통|m2": "1985ee7ba47c",
"단산:98|철근가공및조립|type-i-1,현장가공조립|톤": "f91f3febebf1",
"호표:9": "992b00a50c65",
"호표:13": "2ecc59f87b37",
"단산:51|깬잡석채집|l=30cm내외|m2": "d23b63b9635a",
"단산:12|콘크리트(기계비빔)|무근구조물|m3": "c9ca9357a44a",
"단산:51|깬잡석채집|l=30cm내외|m2": "e2b6831be198",
"단산:12|콘크리트(기계비빔)|무근구조물|m3": "c74e9c324b2c",
"호표:17": "b50496d3f922",
"호표:18": "d796d9bbd4bd",
"호표:22": "2c27c0d9b1e1",
"단산:23|구조물터파기(육상토사0~1m)|기계90%+인력10%(굴삭기0.7m3)|m3": "1e4b4e03372f",
"단산:24|잔토처리|굴삭기0.7m3|m3": "b34905b7e0c2",
"단산:23|구조물터파기(육상토사0~1m)|기계90%+인력10%(굴삭기0.7m3)|m3": "db3c5678df4f",
"단산:24|잔토처리|굴삭기0.7m3|m3": "d315c818fc0f",
"줄:굴삭기(타이어)|0.6m3|시간": "733bdb0730f2",
"호표:24": "24b7a61d2cac",
"단산:3|깬잡석채집|l=35cm내외|m2": "6fa38565606b",
"단산:3|깬잡석채집|l=35cm내외|m2": "77cbf6e4a2ff",
"호표:26": "253290e88b9f",
"단산:52|깬잡석채집|l=60cm내외|m2": "daab119d679a",
"단산:52|깬잡석채집|l=60cm내외|m2": "44b9b3dcffc3",
"호표:28": "10cf341d2ca3",
"단산:81|철근가공및조립(현장)|일반(type-i-1)|톤": "39d3a7e2e7a9",
"호표:31": "82b74ab253f3",
@@ -273,11 +273,11 @@
"호표:33": "35144fc92a5c",
"호표:34": "9b6cffd83699",
"호표:35": "4eb05246e0c3",
"단산:10|레미콘타설(장비사용)|소형구조물|m3": "8717ad5b8652",
"단산:10|레미콘타설(장비사용)|소형구조물|m3": "640411e0f0a8",
"단산:90|평떼붙임||m2": "13cce5a5166b",
"단산:91|단끊기||m": "8701e94849ea",
"단산:97|레미콘타설(장비)|철근|m3": "6c8931bf2865",
"단산:103|레미콘타설(장비)|무근,버림|m3": "c99fd33aad21",
"단산:97|레미콘타설(장비)|철근|m3": "d419cafa4932",
"단산:103|레미콘타설(장비)|무근,버림|m3": "773debae71b8",
"단산:99|철근가공및조립|type-ii-1,현장가공조립|톤": "e6dc6a25683b",
"단산:113|강관동바리|암거용-3개월사용|공/m3": "55bd7c4f030a",
"단산:112|강관비계|3개월사용|m2": "2390793aeb4b",
@@ -320,41 +320,41 @@
"단산:9|잔토처리|인력100%|m3": "aef7e1b84e30",
"줄:크레인(타이어)|10톤|시간": "96a1f07e863b",
"호표:3": "6c59b8689986",
"단산:3|구조물터파기|토사(b/h90%+인력10%)|m3": "acefa16cc78a",
"단산:10|잔토처리|토사(b/h100%)|m3": "c425e33125c6",
"단산:37|콘크리트타설|임도품셈5-5|m3": "65c3e427122f",
"단산:3|구조물터파기|토사(b/h90%+인력10%)|m3": "7953545f58b8",
"단산:10|잔토처리|토사(b/h100%)|m3": "fa9015056847",
"단산:37|콘크리트타설|임도품셈5-5|m3": "2d0b3ca0824f",
"단산:59|유로폼설치,해체(복잡)|수직고7.0m이하|m2": "6b60ee0cf532",
"단산:60|철근가공조립(현장)|typei|톤": "d1c00f23be62",
"단산:600|기초잡석채집및운반부설|4.5톤(l=500)|m3": "91acb80ac602",
"단산:1926|임도안전표지판설치|삼각,d=900|개소": "de7833d5056a",
"단산:411|야면석채집운반|(25x25x35cm)장비|m2": "aeaa86e728d4",
"단산:644|야면석찰붙임|뒷길이35cm|m2": "6771a23d197b",
"단산:1361|고임돌채집운반|4.5톤덤프(l=500)|m3": "203a9315635b",
"단산:1928|잡석운반및다짐||m3": "3a7b79a11b47",
"단산:1927|면고르기||m2": "3d642227dc7b",
"단산:600|기초잡석채집및운반부설|4.5톤(l=500)|m3": "4784bc1b14b0",
"단산:1926|임도안전표지판설치|삼각,d=900|개소": "e05b7a689c1d",
"단산:411|야면석채집운반|(25x25x35cm)장비|m2": "545af7826ba4",
"단산:644|야면석찰붙임|뒷길이35cm|m2": "20cfc54d1cb3",
"단산:1361|고임돌채집운반|4.5톤덤프(l=500)|m3": "09f75762e692",
"단산:1928|잡석운반및다짐||m3": "7c507cfd7d53",
"단산:1927|면고르기||m2": "5d24952044bf",
"단산:1942|구조물터파기|인력(경질토사)|m3": "b25a97237575",
"단산:1759|도로반사경설치|d=1000(sts)|개소": "8f206fca6ae6",
"단산:2071|철근콘크리트타설|장비사용타설|m3": "7a4603d42158",
"단산:2071|철근콘크리트타설|장비사용타설|m3": "998daf7e771a",
"단산:58|유로폼설치,해체(보통)|수직고7.0m이하|m2": "de90b05e1449",
"단산:1854|지수판설치(pvc용접)|200x5t|m": "3aec0042517c",
"단산:1855|배수관부설및접합(p.v.c)|ø50mm-vg2일반관|m": "7200d398af99",
"단산:1466|야면석소운반(l=35cm)|(l=20m)|m2": "79a4f66ac624",
"단산:450|콘크리트소운반|(l=20m)|m3": "9d06f1876010",
"단산:1843|야면석메붙임|뒷길이35cm|m2": "2e66aa2c2197",
"단산:258|측구수로관부설|500∼700kg미만|m": "56683ae7c5bb",
"단산:1844|콘크리트타설|장비사용타설(소형)|m3": "cdd8f38898be",
"단산:1843|야면석메붙임|뒷길이35cm|m2": "e366c880bdb0",
"단산:258|측구수로관부설|500∼700kg미만|m": "d7100836ca16",
"단산:1844|콘크리트타설|장비사용타설(소형)|m3": "2d506172eebd",
"단산:1841|합판거푸집(4회)|보통|m2": "154931aee1b7",
"단산:2001|혼합골재부설|영월-산불|m3": "3c98157c0505",
"단산:2001|혼합골재부설|영월-산불|m3": "64a7980290a9",
"단산:1748|콘크리트포장(인력)|t=20cm|m3": "68e42fbf6871",
"단산:1752|콘크리트포장절단공|임도|m": "50eb38496dbf",
"단산:1519|뒷채움돌채집운반부설|4.5톤덤프트럭(l=500m)|m3": "17e1fe46f3c8",
"단산:81|큰돌메쌓기|뒷길이0.6~0.8m|m2": "99f8c85542df",
"단산:1810|큰돌채집운반(뒷길이0.6~0.8m)|장비(80%)+인력(20%)|m2": "8c9b791dab4b"
"단산:1752|콘크리트포장절단공|임도|m": "35f09be77f1b",
"단산:1519|뒷채움돌채집운반부설|4.5톤덤프트럭(l=500m)|m3": "4bcbbc780730",
"단산:81|큰돌메쌓기|뒷길이0.6~0.8m|m2": "3c6626a3d944",
"단산:1810|큰돌채집운반(뒷길이0.6~0.8m)|장비(80%)+인력(20%)|m2": "374e7a1f93a3"
}
},
"울진대흥": {
"S1": {
"해시": "a2052e0b170c",
"해시": "2a378597aa15",
"꼴": "STmate",
"호표": 34,
"줄": 171,
@@ -387,26 +387,26 @@
"호표:4": "9b0429327796",
"호표:5": "5e88ce0e4c68",
"호표:6": "31bd5eea19c8",
"단산:75|콘크리트믹서사용|0.45m3|m3": "bb028865ae10",
"단산:75|콘크리트믹서사용|0.45m3|m3": "b470c79eb976",
"호표:7": "3476f12e55bf",
"호표:8": "b4f5087c15f6",
"호표:9": "51afe3b087b1",
"호표:10": "fb1dd2cf4c6a",
"줄:굴삭기(0.7m3)||시간": "9c5792c9e5eb",
"호표:11": "af2de3ed3f1c",
"단산:1124|고임돌채집|기계|m3": "d92fb83f5e54",
"단산:159|뒷채움|150m/m내외|m3": "6c3ab2cbc163",
"단산:959|막자갈채집|기계|m3": "f84d5f824e2d",
"단산:1124|고임돌채집|기계|m3": "ae817a2ac5a0",
"단산:159|뒷채움|150m/m내외|m3": "08709d597e93",
"단산:959|막자갈채집|기계|m3": "eacff8bea289",
"단산:2200|콘크리트비빔|채움재|m3": "91472fd9fe57",
"줄:트럭탑재형크레인|5톤|시간": "71cbed958600",
"호표:17": "ad84568a1c33",
"호표:18": "6f1c4c076fd4",
"단산:1129|야면석채집|l3=45cm내외|m2": "629829a9d347",
"단산:2119|야면석채집|l3=35cm내외|m2": "245dfe68e79f",
"단산:1343|구조물터파기(토사)|굴삭기0.7m3|m3": "aa20475c3d30",
"단산:2139|다지기|굴삭기0.7m3|m3": "e1a21a5a7744",
"단산:1129|야면석채집|l3=45cm내외|m2": "a59e92e86b67",
"단산:2119|야면석채집|l3=35cm내외|m2": "b0e17ce1bcaf",
"단산:1343|구조물터파기(토사)|굴삭기0.7m3|m3": "72abcf573fe3",
"단산:2139|다지기|굴삭기0.7m3|m3": "2718acaec93b",
"단산:2195|유로폼설치및해체|간단|m2": "2ada005f71d9",
"단산:2262|레미콘타설|무근(장비사용타설)|m3": "0011fde861d6",
"단산:2262|레미콘타설|무근(장비사용타설)|m3": "fca8b8959999",
"호표:28": "fd2ef8bc220b",
"줄:굴삭기(타이어)|0.6m3,(부착용집게,0.7~0.8m3)|시간": "94a580e075dd",
"호표:29": "02e551e5e700",
@@ -448,7 +448,7 @@
"호표:6": "e3b9e469607e",
"호표:7": "1cd3bb8c5e6d",
"호표:8": "f5f08c081e83",
"단산:150|고임돌채집|기계|m3": "6156ce99f6a7",
"단산:150|고임돌채집|기계|m3": "7de261f760cd",
"호표:10": "c5b7c43c3ee1",
"단산:1453|인력운반|기타|톤": "355f5eac9936",
"호표:12": "c46a6d7e568f",
@@ -457,7 +457,7 @@
},
"울진소광": {
"S1": {
"해시": "af7a97c94ed7",
"해시": "bd1310dccd12",
"꼴": "STmate",
"호표": 25,
"줄": 117,
@@ -498,17 +498,17 @@
"호표:12": "39f4044d3634",
"줄:굴삭기(타이어)|0.6m3|시간": "733bdb0730f2",
"호표:13": "af5f52dc7ecb",
"단산:1456|구조물터파기(토사)|굴착기0.6m3|m3": "5369cb770862",
"단산:1474|구조물되메우기|굴착기0.6m3|m3": "c42bf66f9e58",
"단산:1475|구조물잔토처리|굴착기0.6m3|m3": "ea935c401ec0",
"단산:492|채움콘크리트|기계비빔|m3": "76df4f4c944d",
"단산:91|고임돌채집|굴삭기0.7m3|m3": "445470e48368",
"단산:408|막자갈(파쇄석)채집||m3": "6f29521df826",
"단산:867|막자갈채우기|150mm내외|m3": "f77710424c09",
"단산:1336|레미콘타설|무근(장비)|m3": "5ff7079ff5a0",
"단산:1456|구조물터파기(토사)|굴착기0.6m3|m3": "0973406f3e2a",
"단산:1474|구조물되메우기|굴착기0.6m3|m3": "d7cddaa3d1ba",
"단산:1475|구조물잔토처리|굴착기0.6m3|m3": "5827fbbcc4b8",
"단산:492|채움콘크리트|기계비빔|m3": "07f036449ef1",
"단산:91|고임돌채집|굴삭기0.7m3|m3": "d46bfcbe8564",
"단산:408|막자갈(파쇄석)채집||m3": "946bdf1420ed",
"단산:867|막자갈채우기|150mm내외|m3": "d2df9375e449",
"단산:1336|레미콘타설|무근(장비)|m3": "9991557bff22",
"단산:918|채움con'c|기계비빔|m3": "0c75dd9a29d2",
"단산:1448|파쇄석채집|l3=35cm내외|m2": "5d1cf0f37342",
"단산:1030|고임돌채집|굴삭기0.2m3|m3": "f483cf51e53b",
"단산:1448|파쇄석채집|l3=35cm내외|m2": "8f7299995319",
"단산:1030|고임돌채집|굴삭기0.2m3|m3": "669ef7170a82",
"단산:1354|콘크리포장(t=20cm)포설|인력포설|m3": "ec05dd9a542f",
"단산:794|단끊기|절취없음|m": "6aa07c8cba17",
"단산:1329|평떼붙이기||m2": "0522e960d244",
@@ -0,0 +1,174 @@
"""778-3(D-1) 단위 줄 — 단가산출 블록 · 일위대가 줄을 같은 계산 단위 꼴로(`M02_Hopyo_UnitLine`).
꼴(EST 글 · STmate 행) · 같은 기계 코드 두 묶음 따로 · 비목마다 매개값 `계수` · 율 행 · 셈 밖 ·
여덟 파일(불리는 블록) 줄 수 · 재현 · 덮음 · 할증 풀이 · 요구 624(이름 없는 율 줄 · 두 행 노무 ·
손료율 표지). 읽기만 · 서버 없음.
"""
from __future__ import annotations
import warnings
from collections import Counter
from functools import lru_cache
import pytest
from M02_MasterTemplete import M02_Hopyo_Excel as hx
from M02_MasterTemplete import M02_Hopyo_ReadEst as est
from M02_MasterTemplete import M02_Hopyo_Sangeun as sg
from M02_MasterTemplete import M02_Hopyo_Stmate as st
from M02_MasterTemplete import M02_Hopyo_UnitLine as ul
from resources.tester.helper_m02_hopyo_golden import FILES
warnings.filterwarnings("ignore", category=UserWarning, module="openpyxl")
KEYS = {"묶음", "이름", "규격", "품", "단가", "금액", "어떻게", "행", "절", "윗절"}
def test_EST_글_단위_줄():
text = [
" 1. 굴착기(무한궤도)(0.7㎥)",
" 노무비 : 59,020 ÷ 26.95 × 0.9 = 1,970.9",
" 재료비 : 19,473 ÷ 26.95 = 722.5",
" 2. 인 부",
" 보통인부 : 172,068 × 0.011인 = 1,892.7 (지주)",
" 합판(내수),대전 (12×1220=2440) 28,500. × 0.1 = 2,850.",
" 각재(외송) 500,000 × 0.038 ㎥ × 38. % = 7,220 ₩ / ㎡",
" 특별인부 : P",
" 3. 공구손료(인력품의 3%)",
" 1,892.7 × 0.03 = 56.7",
" 레미콘 : 별도계상",
" 4. 합 계",
" 보통인부 : 172,068 × 0.011인 = 1,892.7",
]
got = est.items(text, list(range(1, len(text) + 1)))
book = {"단산": [{"번": 1, "금액": {"계": 14712.8}, "항목": got}], "호표": []}
ul.settle(book)
kinds = [(u["묶음"], bool(u.get("밖"))) for u in got]
assert kinds == [
("X", False),
("L", False),
("M", False),
("M", False),
("R", False),
("M", False),
("L", True),
] # fmt: skip — 「특별인부 : P」 선언 줄 뺌
assert all(KEYS <= set(u) for u in got)
mach, labor, mat, loss, rate = got[:5]
assert mach["품"] == pytest.approx(0.9 / 26.95) and mach["계수"] == {
"재료비": pytest.approx(1 / 0.9)
}
assert mach["금액"] == pytest.approx(2693.4) and mach["재현"]
assert labor["직종"] == "보통인부" and labor["금액"] == 1892.7 and labor["재현"]
assert mat["이름"].startswith("합판") and mat["품"] == 0.1 and mat["재현"] # 끝 점 · 이름 속 =
assert loss["손료율"] == 0.38 and loss["금액"] == 7220 and loss["재현"] # 손료율 = 자재 줄 표지
assert rate["품"] == 0.03 and rate["기준값"] == 1892.7 and rate["기준"] == "인력품"
assert (
rate["재현"] and rate["절"] == "공구손료(인력품의 3%)" and rate["이름"].startswith("공구")
)
assert rate["기준꼴"] == "인력" and rate["기준줄"] == [5]
assert book["단산"][0]["줄합"] == pytest.approx(14712.8) and book["단산"][0]["덮음"]
def _row(**cells) -> list:
row = [None] * 24
for col, v in cells.items():
row[int(col[1:])] = v
return row
def test_STmate_같은_코드_두_묶음_따로_계수_율_밖():
machine = "굴삭기(0.7m3) / 0.7㎥,(암석)"
rows = [
_row(c0="제 1호표", c2=100, c6="`BDCOD|D00001"),
_row(c1=" (1) 채집"),
_row(c1=" ① 굴삭기", c2=10, c3=10, c7=0.1, c8=100, c9=100, c12="X00009_1", c23=machine),
_row(c1=" 재료비", c2=5, c4=5, c7=0.05, c8=100, c10=100, c12="X00009_1", c23=machine),
_row(c1=" (2) 상차"),
_row(c1=" 노무비", c2=20, c3=20, c7=0.2, c8=100, c9=100, c12="X00009_1", c23=machine),
_row(
c1=" 기구손료 : 30 * 2 %",
c2=0.6,
c4=0.6,
c6="&PA01M:M& * 2'%' =",
c7=2,
c8=30,
c12="PR_1",
),
_row(c1=" 기구손료 : (가공노력품의 9%)"),
_row(
c1=" 30 * 0.09 = 2.7",
c2=2.7,
c4=2.7,
c6="&RA01:M& * 0.09 =",
c7=0.09,
c8=30,
c12="RR_1",
),
_row(
c1=" 보통인부 : 1 * 0.5",
c2=50,
c3=50,
c7=0.5,
c8=100,
c9=100,
c12="L00002_1",
c13="C1_1",
c23="보통인부 / ",
), # fmt: skip
_row(c0="총계"),
]
blocks = st._blocks(rows, {})
units = blocks["D00001"]["항목"]
xs = [u for u in units if u["묶음"] == "X"]
assert [x["품"] for x in xs] == [0.1, 0.2] # 두 묶음 따로(단가 두 배 아님)
assert xs[0]["단가"]["계"] == 200 and xs[1]["단가"]["계"] == 100
assert xs[0]["계수"] == {"재료비": 0.5} and xs[0]["금액"] == 15
rate, bare = [u for u in units if u["묶음"] == "R"]
assert rate["품"] == 0.02 and rate["기준"] == "PA01M" and rate["기준값"] == 30
assert bare["이름"] == "기구손료" and bare["기준글"] == "가공노력품" and bare["품"] == 0.09
assert next(u for u in units if u["묶음"] == "L").get("밖") is True
assert [r["코드"] for r in blocks["D00001"]["자원"]] == ["X00009", "X00009", "L00002"]
@lru_cache(maxsize=1)
def _books() -> dict:
return {tag: hx.read_book(p.name, p.read_bytes()) for tag, p in FILES.items()}
def test_여덟_파일_불리는_블록_줄_재현_덮음():
kinds, outside, redo, cover = Counter(), Counter(), Counter(), Counter()
lines = Counter()
for book in _books().values():
_, first = sg.calls(book)
called = {int(k) for k in first}
for block in book["단산"]:
if int(block["번"]) not in called:
continue
cover[block["덮음"]] += 1
for u in block["항목"]:
if u.get("밖"):
outside[u["묶음"]] += 1
continue
kinds[u["묶음"]] += 1
redo[u["재현"]] += 1
for hopyo in book["호표"]:
lines.update(bool(x["재현"]) for x in hopyo["줄"])
assert dict(kinds) == {"L": 366, "X": 190, "M": 130, "R": 152, "S": 3, "E": 1}
assert dict(outside) == {"L": 2}
assert redo[True] >= 836 and sum(redo.values()) == 842 # 전 811/836
assert cover[True] == 204 and sum(cover.values()) == 206 # 남은 둘 = 엑셀 자체 흠(합이 줄 뺌)
assert lines[True] == 1344 and sum(lines.values()) == 1350
def test_할증_풀이_같은_코드_따로():
books = _books()
block = next(b for b in books["울진소광"]["단산"] if b["번"] == 1448)
xs = [u for u in block["항목"] if u["묶음"] == "X"]
assert [x["할증"] for x in xs] == [1.2, 1.2, 1.25] and all(x["재현"] for x in xs)
block = next(b for b in books["울진대흥"]["단산"] if b["번"] == 1129)
dig = [u for u in block["항목"] if u.get("코드") == "X00009"]
assert len(dig) == 2 and all(u["단가"]["계"] == 100378 and u["재현"] for u in dig)
block = next(b for b in books["봉화"]["단산"] if b["번"] == 3)
dump = next(u for u in block["항목"] if u["이름"].startswith("덤프"))
assert dump["계수"]["재료비"] == pytest.approx(0.1527, abs=1e-4) and dump["재현"]
+17 -18
View File
@@ -1,10 +1,11 @@
"""338-1 엑셀 지문(`M02_Hopyo_Finger` · `_Words` · `_Shares`) — 식 풀기 일곱 꼴 · 합판 지문 · 고임돌
섞음 ·
몫 · STmate 자원 · 기계 줄 · 직접 줄 호표. 실물 = 북부청 임도(읽기만)."""
섞음 · 몫 · STmate 단위 줄 · 기계 줄 · 직접 줄 호표. 지문 = 블록 단위 줄 투영(776-3 · 형식 모름).
실물 = 북부청 임도(읽기만)."""
import pytest
from M02_MasterTemplete import M02_Hopyo_Finger as finger
from M02_MasterTemplete import M02_Hopyo_ReadEst as est
from M02_MasterTemplete import M02_Hopyo_Shares as shares
from M02_MasterTemplete.M02_Hopyo_Words import conds, mtypes, parse_rhs
from resources.tester.helper_m02_hopyo_golden import line_of
@@ -12,6 +13,11 @@ from resources.tester.helper_m02_hopyo_golden import line_of
approx = pytest.approx
def _est(text: list[str]) -> dict:
"""EST 글 → 블록(단위 줄 = 어댑터 `ReadEst.items`)."""
return {"번": 1, "이름": "시험", "단위": "㎥", "글": text, "항목": est.items(text)}
# ── 식 풀기 ────────────────────────────────────────────────────────────
def test_식_단가_떼고_품():
got = parse_rhs("273,540 × 3인 ÷ 55㎥ × 2 = 29,840.7")
@@ -44,7 +50,7 @@ def test_식_횟수_품할증():
def test_식_못_풀면_역산():
assert parse_rhs("273,540 × P = 30,000") is None
block = {"번": 1, "이름": "시험", "단위": "㎥", "글": [" 특별인부 : 273,540 × P = 27,354"]}
block = _est([" 특별인부 : 273,540 × P = 27,354"])
fp = finger.excel(block, {"이름": "시험", "규격": "", "단위": "㎥"})
assert fp["인력"]["특별인부"]["품"] == approx(0.1) and fp["인력"]["특별인부"]["어떻게"] == [
"역산"
@@ -94,28 +100,21 @@ def test_몫_절마다_노임_장비():
" 3. 합 계",
" 보통인부 : 172,068 × 1 = 172,068",
]
parts = shares.sections(texts)
parts = shares.sections(est.items(texts))
assert [p["제목"] for p in parts] == ["굴착기 0.6㎥ 채집(90%)", "인력채집(10%)"]
assert parts[0]["장비"] == {"굴착기|0.6": approx(0.9 / 23.1)}
assert parts[1]["노임"] == {"보통인부": approx(0.03)}
def test_STmate_자원_지문():
def test_STmate_단위_줄_지문():
qty = {"율": [], "인자": [], "어떻게": "QTY"}
block = {
"글": ["잔토처리 (기계100%) 건설표준품셈9-3", "q = 0.7 , K = 0.9"],
"자원": [
{"갈래": "L", "코드": "L00002", "이름": "보통인부", "규격": "", "품": 0.2},
*[
{
"갈래": "X",
"코드": "X00205",
"이름": "굴삭기(무한궤도)",
"규격": "0.7㎥",
"품": 0.0229,
}
]
* 3,
{"갈래": "M", "코드": "M00001", "이름": "모래", "규격": "", "품": 1.2},
"항목": [
{"묶음": "L", "이름": "보통인부", "규격": "", "직종": "보통인부", "품": 0.2, **qty},
{"묶음": "X", "이름": "굴삭기(무한궤도)", "규격": "0.7㎥", "품": 0.0229, **qty},
{"묶음": "M", "이름": "모래", "규격": "", "품": 1.2, "밑품": 1.2, **qty},
{"묶음": "L", "이름": "보통인부", "규격": "", "품": 0.5, "밖": True, **qty},
],
}
fp = finger.excel(block, {"이름": "잔토처리", "규격": "토사", "단위": "M3"})
+1 -1
View File
@@ -87,7 +87,7 @@ def test_조합_근거_안_닿은_덧은_후보(got):
def test_숫자_없음_옛_HP(got):
block, line = line_of("N000")
r = verdict.block({**block, "글": []}, line, got)
r = verdict.block({**block, "글": [], "항목": []}, line, got) # 단위 줄 · 글 없음
assert r["판정"]["상태"] == "후보" and r["판정"]["글"] == fit.NO_NUMBER
assert r["차례"][0] == "GC000198" # 이름 · 근거 차례 그대로