From bb5afa412590b40409ce0c25a3803b8e45a73144 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 7 Nov 2026 17:26:54 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore(800-5):=20M02=20=EB=A7=88=EC=8A=A4?= =?UTF-8?q?=ED=84=B0=20=EC=B8=B5=20=EC=98=9B=20=EC=9D=BC=EC=9C=84=EB=8C=80?= =?UTF-8?q?=EA=B0=80=20=C2=B7=20=EC=82=AC=EC=A0=84=EC=A1=B0=ED=95=A9=20?= =?UTF-8?q?=EC=82=AC=EB=B3=B8=20=EB=B3=80=EC=88=98=ED=91=9C=20=EC=83=88?= =?UTF-8?q?=EB=A1=9C=20=EC=94=80=20=E2=80=94=20=EC=A0=84=ED=9B=84=20?= =?UTF-8?q?=EA=B8=88=EC=95=A1=20=EB=8B=A4=EB=A6=84=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - M02_Copy_Symbols --apply --backup tmp/800_5 결과 중 git 추적 마스터 층 7 파일 - 개인 층은 storage(git 밖) Co-Authored-By: Claude Sonnet 5.5 --- resources/master_template/labor/item1.json | 498 +++++++++++++++++- resources/master_template/labor/item1_2.json | 498 +++++++++++++++++- resources/master_template/labor/item3.json | 135 ++++- resources/master_template/labor/item3_2.json | 246 ++++++++- resources/master_template/labor/item3_3.json | 498 +++++++++++++++++- .../master_template/labor/item3_3_2.json | 350 +++++++++++- .../master_template/precombo/SC-000001.json | 182 ++++++- 7 files changed, 2317 insertions(+), 90 deletions(-) diff --git a/resources/master_template/labor/item1.json b/resources/master_template/labor/item1.json index a9f8b1bbe..668bfd289 100644 --- a/resources/master_template/labor/item1.json +++ b/resources/master_template/labor/item1.json @@ -352,7 +352,7 @@ } }, "사본": { - "판": "e60ad06dfe20892e", + "판": "5bcfbe99102ef55d", "시점": "2026-11-07T15:23:23", "로직": [ { @@ -1013,7 +1013,33 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "용수": { + "기호": "Q", + "아래": "용수" + }, + "깊이": { + "기호": "H", + "아래": "깊이" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + } + } }, { "키": "GC000198", @@ -1135,7 +1161,41 @@ "출처": "건설품셈 공통 6-1-1" } ], - "끝수": null + "끝수": null, + "변수표": { + "타설방법": { + "기호": "S", + "아래": "타설방법" + }, + "구조물": { + "기호": "S", + "아래": "구조물" + }, + "소량감률": { + "기호": "r", + "아래": "소량" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "콘크리트공": { + "기호": "Q", + "아래": "콘크리트공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000206", @@ -1204,7 +1264,21 @@ "출처": "건설품셈 공통 6-2-2" } ], - "끝수": null + "끝수": null, + "변수표": { + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "철근공": { + "기호": "Q", + "아래": "철근공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000207", @@ -1312,7 +1386,33 @@ "출처": "건설품셈 공통 6-2-3" } ], - "끝수": null + "끝수": null, + "변수표": { + "구분": { + "기호": "S", + "아래": "구분" + }, + "호": { + "기호": "S", + "아래": "호" + }, + "소량감률": { + "기호": "r", + "아래": "소량" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "철근공": { + "기호": "Q", + "아래": "철근공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000214", @@ -1388,7 +1488,29 @@ "출처": "건설품셈 공통 6-3-3" } ], - "끝수": null + "끝수": null, + "변수표": { + "유형": { + "기호": "S", + "아래": "유형" + }, + "높이감률": { + "기호": "r", + "아래": "높이" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "형틀목공": { + "기호": "Q", + "아래": "형틀목공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000267", @@ -1510,7 +1632,41 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000268", @@ -1727,7 +1883,33 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000270", @@ -1871,7 +2053,53 @@ "출처": "건설품셈 공통 8-4-8 주⑤" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "집게": { + "기호": "S", + "아래": "집게" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "집게손료": { + "기호": "C", + "아래": "집게" + }, + "조합잡재료율": { + "기호": "r", + "아래": "조합잡재료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000677", @@ -1957,7 +2185,25 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "모래체가름": { + "기호": "S", + "아래": "모래체가름" + }, + "배합용적비": { + "기호": "r", + "아래": "배합" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GF000112", @@ -2078,7 +2324,29 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "인력비율": { + "기호": "r", + "아래": "인력" + }, + "기계비율": { + "기호": "r", + "아래": "기계" + }, + "작업량": { + "기호": "Q", + "아래": "작업" + } + } }, { "키": "GF000156", @@ -2286,7 +2554,61 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "구분": { + "기호": "S", + "아래": "구분" + }, + "믹서": { + "기호": "S", + "아래": "믹서" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "재료배합": { + "기호": "S", + "아래": "재료배합" + }, + "골재최대치수": { + "기호": "N", + "아래": "골재최대치" + }, + "수중": { + "기호": "S", + "아래": "수중" + }, + "모래상태": { + "기호": "S", + "아래": "모래상태" + }, + "자갈상태": { + "기호": "S", + "아래": "자갈상태" + }, + "모래단위중량": { + "기호": "W", + "아래": "모래단위" + }, + "자갈단위중량": { + "기호": "W", + "아래": "자갈단위" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + }, + "모래밀도": { + "기호": "ρ", + "아래": "모래" + }, + "자갈밀도": { + "기호": "ρ", + "아래": "자갈" + } + } }, { "키": "GF000214", @@ -2348,7 +2670,21 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "단위당": { + "기호": "S", + "아래": "단위당" + }, + "소할": { + "기호": "S", + "아래": "소할" + } + } }, { "키": "GF000218", @@ -2435,7 +2771,21 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "규격": { + "기호": "S", + "아래": "규격" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + } + } }, { "키": "GF000221", @@ -2580,7 +2930,37 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "돌": { + "기호": "S", + "아래": "돌" + }, + "쌓기": { + "기호": "S", + "아래": "쌓기" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "GF000222", @@ -2732,7 +3112,41 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "채움콘크리트량": { + "기호": "Q", + "아래": "채움콘크리트" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "GF000225", @@ -2884,7 +3298,41 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "채움콘크리트량": { + "기호": "Q", + "아래": "채움콘크리트" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "GF000226", @@ -2983,7 +3431,21 @@ "출처": "산림품셈 13-6-1 주③(상한)" } ], - "끝수": null + "끝수": null, + "변수표": { + "직경": { + "기호": "D", + "아래": "직경" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + } + } }, { "키": "QC000183", diff --git a/resources/master_template/labor/item1_2.json b/resources/master_template/labor/item1_2.json index 2e089c408..5ebb2840a 100644 --- a/resources/master_template/labor/item1_2.json +++ b/resources/master_template/labor/item1_2.json @@ -940,7 +940,7 @@ } }, "사본": { - "판": "e60ad06dfe20892e", + "판": "5bcfbe99102ef55d", "시점": "2026-11-07T15:23:23", "로직": [ { @@ -1601,7 +1601,33 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "용수": { + "기호": "Q", + "아래": "용수" + }, + "깊이": { + "기호": "H", + "아래": "깊이" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + } + } }, { "키": "GC000198", @@ -1723,7 +1749,41 @@ "출처": "건설품셈 공통 6-1-1" } ], - "끝수": null + "끝수": null, + "변수표": { + "타설방법": { + "기호": "S", + "아래": "타설방법" + }, + "구조물": { + "기호": "S", + "아래": "구조물" + }, + "소량감률": { + "기호": "r", + "아래": "소량" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "콘크리트공": { + "기호": "Q", + "아래": "콘크리트공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000206", @@ -1792,7 +1852,21 @@ "출처": "건설품셈 공통 6-2-2" } ], - "끝수": null + "끝수": null, + "변수표": { + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "철근공": { + "기호": "Q", + "아래": "철근공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000207", @@ -1900,7 +1974,33 @@ "출처": "건설품셈 공통 6-2-3" } ], - "끝수": null + "끝수": null, + "변수표": { + "구분": { + "기호": "S", + "아래": "구분" + }, + "호": { + "기호": "S", + "아래": "호" + }, + "소량감률": { + "기호": "r", + "아래": "소량" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "철근공": { + "기호": "Q", + "아래": "철근공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000214", @@ -1976,7 +2076,29 @@ "출처": "건설품셈 공통 6-3-3" } ], - "끝수": null + "끝수": null, + "변수표": { + "유형": { + "기호": "S", + "아래": "유형" + }, + "높이감률": { + "기호": "r", + "아래": "높이" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "형틀목공": { + "기호": "Q", + "아래": "형틀목공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000267", @@ -2098,7 +2220,41 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000268", @@ -2315,7 +2471,33 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000270", @@ -2459,7 +2641,53 @@ "출처": "건설품셈 공통 8-4-8 주⑤" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "집게": { + "기호": "S", + "아래": "집게" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "집게손료": { + "기호": "C", + "아래": "집게" + }, + "조합잡재료율": { + "기호": "r", + "아래": "조합잡재료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000677", @@ -2545,7 +2773,25 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "모래체가름": { + "기호": "S", + "아래": "모래체가름" + }, + "배합용적비": { + "기호": "r", + "아래": "배합" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GF000112", @@ -2666,7 +2912,29 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "인력비율": { + "기호": "r", + "아래": "인력" + }, + "기계비율": { + "기호": "r", + "아래": "기계" + }, + "작업량": { + "기호": "Q", + "아래": "작업" + } + } }, { "키": "GF000156", @@ -2874,7 +3142,61 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "구분": { + "기호": "S", + "아래": "구분" + }, + "믹서": { + "기호": "S", + "아래": "믹서" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "재료배합": { + "기호": "S", + "아래": "재료배합" + }, + "골재최대치수": { + "기호": "N", + "아래": "골재최대치" + }, + "수중": { + "기호": "S", + "아래": "수중" + }, + "모래상태": { + "기호": "S", + "아래": "모래상태" + }, + "자갈상태": { + "기호": "S", + "아래": "자갈상태" + }, + "모래단위중량": { + "기호": "W", + "아래": "모래단위" + }, + "자갈단위중량": { + "기호": "W", + "아래": "자갈단위" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + }, + "모래밀도": { + "기호": "ρ", + "아래": "모래" + }, + "자갈밀도": { + "기호": "ρ", + "아래": "자갈" + } + } }, { "키": "GF000214", @@ -2936,7 +3258,21 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "단위당": { + "기호": "S", + "아래": "단위당" + }, + "소할": { + "기호": "S", + "아래": "소할" + } + } }, { "키": "GF000218", @@ -3023,7 +3359,21 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "규격": { + "기호": "S", + "아래": "규격" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + } + } }, { "키": "GF000221", @@ -3168,7 +3518,37 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "돌": { + "기호": "S", + "아래": "돌" + }, + "쌓기": { + "기호": "S", + "아래": "쌓기" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "GF000222", @@ -3320,7 +3700,41 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "채움콘크리트량": { + "기호": "Q", + "아래": "채움콘크리트" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "GF000225", @@ -3472,7 +3886,41 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "채움콘크리트량": { + "기호": "Q", + "아래": "채움콘크리트" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "GF000226", @@ -3571,7 +4019,21 @@ "출처": "산림품셈 13-6-1 주③(상한)" } ], - "끝수": null + "끝수": null, + "변수표": { + "직경": { + "기호": "D", + "아래": "직경" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + } + } }, { "키": "QC000183", diff --git a/resources/master_template/labor/item3.json b/resources/master_template/labor/item3.json index e820972e6..85613451a 100644 --- a/resources/master_template/labor/item3.json +++ b/resources/master_template/labor/item3.json @@ -247,7 +247,7 @@ } }, "사본": { - "판": "d043469fa909537f", + "판": "4066584ac7f0910f", "시점": "2026-11-07T15:23:23", "로직": [ { @@ -573,7 +573,41 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000268", @@ -790,7 +824,33 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GF000118", @@ -831,7 +891,13 @@ "식": "반올림(3600 * q0 * K * f * E / Cm, 3)", "출처": "건설품셈 공통 8-1-4 주①" }, - "끝수": "소수 3자리 사사오입(건설품셈 공통 8-1-4 주①)" + "끝수": "소수 3자리 사사오입(건설품셈 공통 8-1-4 주①)", + "변수표": { + "q0": { + "기호": "q", + "아래": "0" + } + } }, { "키": "GF000119", @@ -896,7 +962,21 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "작업량": { + "기호": "Q", + "아래": "작업" + } + } }, { "키": "GF000137", @@ -982,7 +1062,22 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "t2": { + "이름": "한 번 싣고 내리는 데 드는 시간", + "기호": "t", + "아래": "2" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "운반수단": { + "기호": "S", + "아래": "운반수단" + } + } }, { "키": "GF000219", @@ -1075,7 +1170,33 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "돌": { + "기호": "S", + "아래": "돌" + }, + "쌓기": { + "기호": "S", + "아래": "쌓기" + }, + "높이": { + "기호": "H", + "아래": "높이" + }, + "초과증가율": { + "기호": "r", + "아래": "초과" + }, + "증가율": { + "기호": "r", + "아래": "증가율" + } + } }, { "키": "QF000307", diff --git a/resources/master_template/labor/item3_2.json b/resources/master_template/labor/item3_2.json index b43269585..facc3ce30 100644 --- a/resources/master_template/labor/item3_2.json +++ b/resources/master_template/labor/item3_2.json @@ -508,7 +508,7 @@ } }, "사본": { - "판": "75ef826c33aa4cc3", + "판": "bf62fc43e50cd058", "시점": "2026-11-07T15:23:24", "로직": [ { @@ -941,7 +941,33 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "용수": { + "기호": "Q", + "아래": "용수" + }, + "깊이": { + "기호": "H", + "아래": "깊이" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + } + } }, { "키": "GC000363", @@ -993,7 +1019,13 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "거리": { + "기호": "L", + "아래": "거리" + } + } }, { "키": "GC000267", @@ -1115,7 +1147,41 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000268", @@ -1332,7 +1398,33 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000270", @@ -1476,7 +1568,53 @@ "출처": "건설품셈 공통 8-4-8 주⑤" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "집게": { + "기호": "S", + "아래": "집게" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "집게손료": { + "기호": "C", + "아래": "집게" + }, + "조합잡재료율": { + "기호": "r", + "아래": "조합잡재료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GF000112", @@ -1597,7 +1735,29 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "인력비율": { + "기호": "r", + "아래": "인력" + }, + "기계비율": { + "기호": "r", + "아래": "기계" + }, + "작업량": { + "기호": "Q", + "아래": "작업" + } + } }, { "키": "GF000212", @@ -1648,7 +1808,17 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "단위": { + "기호": "S", + "아래": "단위" + }, + "소할": { + "기호": "S", + "아래": "소할" + } + } }, { "키": "GF000213", @@ -1745,7 +1915,29 @@ "출처": "산림품셈 13-2-3 주⑤(상한)" } ], - "끝수": null + "끝수": null, + "변수표": { + "규격": { + "기호": "S", + "아래": "규격" + }, + "발생": { + "기호": "S", + "아래": "발생" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "비율": { + "기호": "r", + "아래": "비율" + } + } }, { "키": "GF000218", @@ -1832,7 +2024,21 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "규격": { + "기호": "S", + "아래": "규격" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + } + } }, { "키": "GF000220", @@ -1931,7 +2137,25 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "잡석량": { + "기호": "Q", + "아래": "잡석" + } + } }, { "키": "QC000183", diff --git a/resources/master_template/labor/item3_3.json b/resources/master_template/labor/item3_3.json index 40065cda2..7579c3959 100644 --- a/resources/master_template/labor/item3_3.json +++ b/resources/master_template/labor/item3_3.json @@ -1060,7 +1060,7 @@ } }, "사본": { - "판": "e60ad06dfe20892e", + "판": "5bcfbe99102ef55d", "시점": "2026-11-07T15:23:24", "로직": [ { @@ -1721,7 +1721,33 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "용수": { + "기호": "Q", + "아래": "용수" + }, + "깊이": { + "기호": "H", + "아래": "깊이" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + } + } }, { "키": "GC000198", @@ -1843,7 +1869,41 @@ "출처": "건설품셈 공통 6-1-1" } ], - "끝수": null + "끝수": null, + "변수표": { + "타설방법": { + "기호": "S", + "아래": "타설방법" + }, + "구조물": { + "기호": "S", + "아래": "구조물" + }, + "소량감률": { + "기호": "r", + "아래": "소량" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "콘크리트공": { + "기호": "Q", + "아래": "콘크리트공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000206", @@ -1912,7 +1972,21 @@ "출처": "건설품셈 공통 6-2-2" } ], - "끝수": null + "끝수": null, + "변수표": { + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "철근공": { + "기호": "Q", + "아래": "철근공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000207", @@ -2020,7 +2094,33 @@ "출처": "건설품셈 공통 6-2-3" } ], - "끝수": null + "끝수": null, + "변수표": { + "구분": { + "기호": "S", + "아래": "구분" + }, + "호": { + "기호": "S", + "아래": "호" + }, + "소량감률": { + "기호": "r", + "아래": "소량" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "철근공": { + "기호": "Q", + "아래": "철근공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000214", @@ -2096,7 +2196,29 @@ "출처": "건설품셈 공통 6-3-3" } ], - "끝수": null + "끝수": null, + "변수표": { + "유형": { + "기호": "S", + "아래": "유형" + }, + "높이감률": { + "기호": "r", + "아래": "높이" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "형틀목공": { + "기호": "Q", + "아래": "형틀목공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000267", @@ -2218,7 +2340,41 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000268", @@ -2435,7 +2591,33 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000270", @@ -2579,7 +2761,53 @@ "출처": "건설품셈 공통 8-4-8 주⑤" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "집게": { + "기호": "S", + "아래": "집게" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "집게손료": { + "기호": "C", + "아래": "집게" + }, + "조합잡재료율": { + "기호": "r", + "아래": "조합잡재료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000677", @@ -2665,7 +2893,25 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "모래체가름": { + "기호": "S", + "아래": "모래체가름" + }, + "배합용적비": { + "기호": "r", + "아래": "배합" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GF000112", @@ -2786,7 +3032,29 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "인력비율": { + "기호": "r", + "아래": "인력" + }, + "기계비율": { + "기호": "r", + "아래": "기계" + }, + "작업량": { + "기호": "Q", + "아래": "작업" + } + } }, { "키": "GF000156", @@ -2994,7 +3262,61 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "구분": { + "기호": "S", + "아래": "구분" + }, + "믹서": { + "기호": "S", + "아래": "믹서" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "재료배합": { + "기호": "S", + "아래": "재료배합" + }, + "골재최대치수": { + "기호": "N", + "아래": "골재최대치" + }, + "수중": { + "기호": "S", + "아래": "수중" + }, + "모래상태": { + "기호": "S", + "아래": "모래상태" + }, + "자갈상태": { + "기호": "S", + "아래": "자갈상태" + }, + "모래단위중량": { + "기호": "W", + "아래": "모래단위" + }, + "자갈단위중량": { + "기호": "W", + "아래": "자갈단위" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + }, + "모래밀도": { + "기호": "ρ", + "아래": "모래" + }, + "자갈밀도": { + "기호": "ρ", + "아래": "자갈" + } + } }, { "키": "GF000214", @@ -3056,7 +3378,21 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "단위당": { + "기호": "S", + "아래": "단위당" + }, + "소할": { + "기호": "S", + "아래": "소할" + } + } }, { "키": "GF000218", @@ -3143,7 +3479,21 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "규격": { + "기호": "S", + "아래": "규격" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + } + } }, { "키": "GF000221", @@ -3288,7 +3638,37 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "돌": { + "기호": "S", + "아래": "돌" + }, + "쌓기": { + "기호": "S", + "아래": "쌓기" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "GF000222", @@ -3440,7 +3820,41 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "채움콘크리트량": { + "기호": "Q", + "아래": "채움콘크리트" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "GF000225", @@ -3592,7 +4006,41 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "채움콘크리트량": { + "기호": "Q", + "아래": "채움콘크리트" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "GF000226", @@ -3691,7 +4139,21 @@ "출처": "산림품셈 13-6-1 주③(상한)" } ], - "끝수": null + "끝수": null, + "변수표": { + "직경": { + "기호": "D", + "아래": "직경" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + } + } }, { "키": "QC000183", diff --git a/resources/master_template/labor/item3_3_2.json b/resources/master_template/labor/item3_3_2.json index 8929810c7..de9fb864b 100644 --- a/resources/master_template/labor/item3_3_2.json +++ b/resources/master_template/labor/item3_3_2.json @@ -548,7 +548,7 @@ } }, "사본": { - "판": "ab40c47aaca75ea0", + "판": "c5c52d0e8e6c254c", "시점": "2026-11-07T15:23:24", "로직": [ { @@ -1211,7 +1211,33 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "용수": { + "기호": "Q", + "아래": "용수" + }, + "깊이": { + "기호": "H", + "아래": "깊이" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + } + } }, { "키": "GC000198", @@ -1333,7 +1359,41 @@ "출처": "건설품셈 공통 6-1-1" } ], - "끝수": null + "끝수": null, + "변수표": { + "타설방법": { + "기호": "S", + "아래": "타설방법" + }, + "구조물": { + "기호": "S", + "아래": "구조물" + }, + "소량감률": { + "기호": "r", + "아래": "소량" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "시공량": { + "기호": "Q", + "아래": "시공" + }, + "콘크리트공": { + "기호": "Q", + "아래": "콘크리트공" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GC000267", @@ -1455,7 +1515,41 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000268", @@ -1672,7 +1766,33 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000270", @@ -1816,7 +1936,53 @@ "출처": "건설품셈 공통 8-4-8 주⑤" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "집게": { + "기호": "S", + "아래": "집게" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "집게손료": { + "기호": "C", + "아래": "집게" + }, + "조합잡재료율": { + "기호": "r", + "아래": "조합잡재료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000677", @@ -1902,7 +2068,25 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "모래체가름": { + "기호": "S", + "아래": "모래체가름" + }, + "배합용적비": { + "기호": "r", + "아래": "배합" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + }, + "보통인부": { + "기호": "Q", + "아래": "보통인부" + } + } }, { "키": "GF000101", @@ -1987,7 +2171,29 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "인력비율": { + "기호": "r", + "아래": "인력" + }, + "기계비율": { + "기호": "r", + "아래": "기계" + }, + "작업량": { + "기호": "Q", + "아래": "작업" + } + } }, { "키": "GF000156", @@ -2195,7 +2401,61 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "구분": { + "기호": "S", + "아래": "구분" + }, + "믹서": { + "기호": "S", + "아래": "믹서" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "재료배합": { + "기호": "S", + "아래": "재료배합" + }, + "골재최대치수": { + "기호": "N", + "아래": "골재최대치" + }, + "수중": { + "기호": "S", + "아래": "수중" + }, + "모래상태": { + "기호": "S", + "아래": "모래상태" + }, + "자갈상태": { + "기호": "S", + "아래": "자갈상태" + }, + "모래단위중량": { + "기호": "W", + "아래": "모래단위" + }, + "자갈단위중량": { + "기호": "W", + "아래": "자갈단위" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + }, + "모래밀도": { + "기호": "ρ", + "아래": "모래" + }, + "자갈밀도": { + "기호": "ρ", + "아래": "자갈" + } + } }, { "키": "GF000214", @@ -2257,7 +2517,21 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "단위당": { + "기호": "S", + "아래": "단위당" + }, + "소할": { + "기호": "S", + "아래": "소할" + } + } }, { "키": "GF000224", @@ -2356,7 +2630,25 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "잡석량": { + "기호": "Q", + "아래": "잡석" + } + } }, { "키": "GF000225", @@ -2508,7 +2800,41 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "굵은골재최대치수": { + "기호": "N", + "아래": "굵은골재최대" + }, + "강도": { + "기호": "σ", + "아래": "강도" + }, + "슬럼프": { + "기호": "S", + "아래": "슬럼프" + }, + "뒷길이": { + "기호": "L", + "아래": "뒷" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "채움콘크리트량": { + "기호": "Q", + "아래": "채움콘크리트" + }, + "자재지역": { + "기호": "S", + "아래": "자재지역" + } + } }, { "키": "QC000183", diff --git a/resources/master_template/precombo/SC-000001.json b/resources/master_template/precombo/SC-000001.json index 864232711..cdf64eb02 100644 --- a/resources/master_template/precombo/SC-000001.json +++ b/resources/master_template/precombo/SC-000001.json @@ -23,7 +23,7 @@ ], "본뜬": null, "사본": { - "판": "4f194aa411764eaf", + "판": "bac248e9d4e944ec", "시점": "2026-11-07T15:23:21", "로직": [ { @@ -304,7 +304,41 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000268", @@ -521,7 +555,33 @@ "출처": "건설품셈 공통 8-1-6 2" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GC000270", @@ -665,7 +725,53 @@ "출처": "건설품셈 공통 8-4-8 주⑤" } ], - "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음" + "끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음", + "변수표": { + "기계": { + "기호": "S", + "아래": "기계" + }, + "집게": { + "기호": "S", + "아래": "집게" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "가산비율": { + "기호": "r", + "아래": "가산" + }, + "손료": { + "기호": "C", + "아래": "손료" + }, + "집게손료": { + "기호": "C", + "아래": "집게" + }, + "조합잡재료율": { + "기호": "r", + "아래": "조합잡재료" + }, + "연료": { + "기호": "S", + "아래": "연료" + }, + "직종": { + "기호": "S", + "아래": "직종" + }, + "시간환산": { + "기호": "Q", + "아래": "시간환산" + } + } }, { "키": "GF000289", @@ -798,7 +904,37 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "가슴높이지름": { + "기호": "D", + "아래": "가슴높이" + }, + "작업": { + "기호": "S", + "아래": "작업" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "벌목가산": { + "기호": "r", + "아래": "벌목" + }, + "보통가산": { + "기호": "r", + "아래": "보통" + }, + "장비": { + "기호": "S", + "아래": "장비" + } + } }, { "키": "GF000297", @@ -933,7 +1069,41 @@ } ], "덧줄": [], - "끝수": null + "끝수": null, + "변수표": { + "흉고직경": { + "기호": "D", + "아래": "흉고" + }, + "지주목": { + "기호": "S", + "아래": "지주목" + }, + "타이어크레인": { + "기호": "S", + "아래": "타이어크레인" + }, + "지역": { + "기호": "S", + "아래": "지역" + }, + "보정작업": { + "기호": "S", + "아래": "보정작업" + }, + "기계": { + "기호": "S", + "아래": "기계" + }, + "감": { + "기호": "Q", + "아래": "감" + }, + "굴착기": { + "기호": "S", + "아래": "굴착기" + } + } }, { "키": "QF000050", From 2a41b989a23e69d965c5f67e3619227e89412024 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 7 Nov 2026 17:26:57 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat(800-5):=20=ED=98=B8=ED=91=9C=20?= =?UTF-8?q?=EC=A4=84=20=EA=B8=88=EC=95=A1=20=EC=B0=B8=EC=A1=B0=20=EA=B8=B0?= =?UTF-8?q?=ED=98=B8=20=E2=80=94=20=EC=A0=95=EC=9D=98=20=EC=98=81=EC=97=AD?= =?UTF-8?q?=EB=8F=84=20=EC=94=8C=EC=9A=B4=20=EA=B8=B0=ED=98=B8(C=5F?= =?UTF-8?q?=ED=95=A9=ED=8C=90)=20=C2=B7=20M02=20=EC=98=9B=20=EC=82=AC?= =?UTF-8?q?=EB=B3=B8=20=EB=B3=80=EC=88=98=ED=91=9C=20=EC=83=88=EB=A1=9C=20?= =?UTF-8?q?=EC=93=B0=EB=8A=94=20=ED=95=9C=20=EB=B2=88=20=EB=8F=84=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 정의 영역: 줄 참조 기호를 이름으로 덮던 줄 뺌 → 수식 영역과 같은 글(master_symbol 한 곳) - M02_Copy_Symbols: 옛 사본 줄 변수표가 비었거나 열쇠 그대로면 지금 M01 줄 변수표로 채움 · 고친 기호 그대로 · 금액 대조 같을 때만 씀 · --backup - test_800_5 새 4: 줄 참조 · M01 정의 한글(하위 로직 칩 빼고) 0 · 옛 사본 새로 씀 · 사용자 고침 보존 · 백업 되돌림 Co-Authored-By: Claude Sonnet 5.5 --- M02_MasterTemplete/M02_Copy_Symbols.py | 115 ++++++++++++++ .../scripts/master_equation_view.py | 2 +- resources/tester/test_800_5_copy_symbols.py | 140 ++++++++++++++++++ 3 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 M02_MasterTemplete/M02_Copy_Symbols.py create mode 100644 resources/tester/test_800_5_copy_symbols.py diff --git a/M02_MasterTemplete/M02_Copy_Symbols.py b/M02_MasterTemplete/M02_Copy_Symbols.py new file mode 100644 index 000000000..d93d7b995 --- /dev/null +++ b/M02_MasterTemplete/M02_Copy_Symbols.py @@ -0,0 +1,115 @@ +"""옛 로직 사본 변수표 새로 쓰기 — 한 번 돌리는 도구(PLAN 800-5 · 요구 660-1 · 659-1). + +옛 사본(795-5 이전에 찍힌 것) 줄은 변수표(이름 · 기호 · 아래 · 위)가 비었거나 한글 그대로 → +수식 영역에 한글 기호가 보임. 지금 M01 줄의 변수표로 그 줄 변수만 채움: + · 사본 줄에 이미 정한 기호(영문 · 그리스 · 사용자가 고친 것)가 있는 칸 = 그대로 + · 기호가 비었거나 열쇠 그대로(한글)인 칸 = M01 칸(이름 · 기호 · 아래 · 위)으로 + · M01 에 그 줄 · 그 변수가 없으면 건드리지 않음(= 목록 「못닿음」) +금액 · 셈 = 변수표는 보이기만 → 전후 금액 대조(같을 때만 씀) · 사본 `판`은 줄 지문으로 다시 셈 +(M01 줄과 같아지면 `M01새판` 표지도 걷힘). +되돌릴 길 = 쓰기 전 파일 그대로 `--backup` 폴더에(`M02_Copy_Migrate --restore` 로 덮음). +프로젝트 층 문서는 건드리지 않음(굳힌 사본). + + ./venv/Scripts/python.exe -m M02_MasterTemplete.M02_Copy_Symbols # 보기만 + ./venv/Scripts/python.exe -m M02_MasterTemplete.M02_Copy_Symbols --apply --backup tmp/800_5 +""" + +from __future__ import annotations + +import json +import shutil +import sys +from pathlib import Path +from typing import Any + +from common_util.common_util_json import atomic_write_json +from M02_MasterTemplete import M02_Copy_Migrate as mig +from M02_MasterTemplete import M02_Sangeun_Copy as skc + +FIELD = "변수표" # master_equation.FIELD 와 같은 칸 +LOOK = ("이름", "기호", "아래", "위") + + +def _open(entry: Any, name: str) -> bool: + """사본 칸이 채울 자리 — 없음 · 기호 없음 · 열쇠 그대로(한글 기본).""" + sign = str((entry or {}).get("기호") or "") + return not sign or sign == name + + +def fill(copy: dict, whole: Any) -> tuple[dict, int, int]: + """(새 사본, 채운 칸 수, 못 닿은 변수 수) — 줄 `변수표`만 고치고 `판` 다시 셈.""" + rows, done, lost = [], 0, 0 + for row in copy["로직"]: + key = str(row.get("키")) + live = whole.index.get(key[:2], {}).get(key) or {} + src = live.get(FIELD) if isinstance(live.get(FIELD), dict) else {} + mine = dict(row.get(FIELD) or {}) + for part in ("입력", "중간"): + for spec in row.get(part) or []: + name = str(spec.get("이름")) + new = (src or {}).get(name) + if not _open(mine.get(name), name): + continue + if not isinstance(new, dict) or not new.get("기호"): + lost += 1 + continue + mine[name] = {**(mine.get(name) or {}), **{k: new[k] for k in LOOK if k in new}} + done += 1 + rows.append({**row, FIELD: mine} if mine != (row.get(FIELD) or {}) else row) + return {**copy, "로직": rows, "판": skc._fp(rows)}, done, lost + + +def check(kind: str, path: Path) -> dict[str, Any]: + """문서 하나 — {상태: 있음 | 채울것없음 | 같음 | 다름 | 못셈, 채움, 못닿음, 사본?}.""" + from M02_MasterTemplete import M02_MasterTemplete_Store as store + + doc = json.loads(path.read_bytes()) + if not skc.has(doc): + return {"상태": "사본없음"} + try: + with store.at(path.parent.parent): + live = skc.whole_() + new, done, lost = fill(doc[skc.KEY], live) + if not done: + return {"상태": "채울것없음", "못닿음": lost} + clean = mig._clean(kind, doc, path.stem) + before = mig._money(kind, clean, skc.over({skc.KEY: doc[skc.KEY]}, live)) + after = mig._money(kind, clean, skc.over({skc.KEY: new}, live)) + except Exception as e: # noqa: BLE001 — 못 셈 = 목록(통째로 멈추지 않음) + return {"상태": "못셈", "까닭": str(e) or type(e).__name__} + row = {"상태": "같음" if before == after else "다름", "채움": done, "못닿음": lost} + return {**row, "사본": new} if before == after else {**row, "전": before, "후": after} + + +def run(apply: bool = False, backup: Path | None = None) -> list[dict[str, Any]]: + """마스터 · 회사 · 개인 층 문서마다 {어디, 종류, 키, 상태, 씀, …} · `apply` = 같음만 씀.""" + if apply and backup is None: + raise ValueError("--apply 는 --backup 폴더가 있어야 함") + out = [] + for where_, kind, path, project in mig._files(): + if project: + continue + got = check(kind, path) + copy = got.pop("사본", None) + row = {"어디": where_, "종류": kind, "키": path.stem, **got, "씀": False} + if apply and copy: + keep = mig._backup_path(path, backup) + keep.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(path, keep) + atomic_write_json(path, {**json.loads(path.read_bytes()), skc.KEY: copy}) + row["씀"] = True + out.append(row) + return out + + +if __name__ == "__main__": # 브레인 지시 뒤만 --apply + args = sys.argv[1:] + at = Path(args[args.index("--backup") + 1]) if "--backup" in args else None + rows = run("--apply" in args, at) + for one in rows: + if one["상태"] not in ("사본없음", "채울것없음", "같음"): + print(json.dumps(one, ensure_ascii=False, default=str)) + count: dict[str, int] = {} + for one in rows: + count[one["상태"]] = count.get(one["상태"], 0) + 1 + print(json.dumps(count, ensure_ascii=False), "채움", sum(r.get("채움", 0) for r in rows)) diff --git a/resources/master_data/scripts/master_equation_view.py b/resources/master_data/scripts/master_equation_view.py index 8cbdc64cc..3027062f3 100644 --- a/resources/master_data/scripts/master_equation_view.py +++ b/resources/master_data/scripts/master_equation_view.py @@ -100,7 +100,7 @@ def definitions(lines: list[dict], row: dict, rows: list[dict], unused) -> list[ name = node.get("칸") or name if kind == "찾기" else name one = { "열쇠": key if mine else "", - "기호": (look.get("기호") or name) if not key.startswith("줄.") else name, + "기호": look.get("기호") or name, # 줄 참조도 씌운 기호(master_symbol 한 곳) "위": look.get("위") or "", "아래": look.get("아래") or "", "이름": name, diff --git a/resources/tester/test_800_5_copy_symbols.py b/resources/tester/test_800_5_copy_symbols.py new file mode 100644 index 000000000..49bf5d468 --- /dev/null +++ b/resources/tester/test_800_5_copy_symbols.py @@ -0,0 +1,140 @@ +# ruff: noqa: F811 — 임시 층 fixture(world)를 test_m02_labor_ref 에서 받아 씀 +"""800-5 기호 남은 한글 — 임시 storage 에서만. + +① 호표 줄 금액 참조(`줄.`) 기호 = 수식 영역 · 정의 영역 같은 글(한글 0) ② 새 사본 = 이미 새 기호 +③ 옛 사본 변수표 새로 씀 = 사용자 고침 칸 그대로 · 금액 같음 · 백업 되돌림 ④ M01 전수 한글 기호(하위 로직 칩 제외) 0. +""" + +from __future__ import annotations + +import copy +import importlib +import json +import re + +from M02_MasterTemplete import M02_Copy_Migrate as mig +from M02_MasterTemplete import M02_Copy_Symbols as sym +from M02_MasterTemplete import M02_Sangeun_Copy as skc +from M01_MasterData import M01_MasterData_Store as m01 +from M02_MasterTemplete import M02_Labor_Ref as refs +from M02_MasterTemplete import M02_MasterTemplete_Store as store +from resources.tester.test_m02_labor_ref import world # noqa: F401 — 같은 임시 층 + +LINE = {"로직": "GC000211", "수량": {"손": 1}} # 변수 많은 합판거푸집 + + +def _make(me): + with store.at(me): + sk = refs.create( + "sangeun", + {"이름": "sub2임시", "단위": "㎡", "바탕": {"로직": "GC000211"}, "더한줄": []}, + )["이름"] + path = me / "sangeun" / f"{sk}.json" + raw = {k: v for k, v in json.loads(path.read_bytes()).items() if k != skc.KEY} + path.write_text(json.dumps(raw, ensure_ascii=False), encoding="utf-8") + return {path: raw} + + +def _mine(rows, olds): + keys = {p.stem for p in olds} + return {r["키"]: r for r in rows if r["어디"].startswith("개인") and r["키"] in keys} + + +meq = importlib.import_module("master_equation") +HAN = re.compile(r"[가-힣]") + + +def _walk(tree, out: list) -> None: + if isinstance(tree, dict): + if tree.get("꼴") == "변수": + out.append(tree) + for v in tree.values(): + _walk(v, out) + elif isinstance(tree, list): + for v in tree: + _walk(v, out) + + +def test_줄_참조_기호_같은_글_한글_0(): + eq = meq.export(m01.loaded()[1], "GC000211") + refs = [] + _walk(eq["줄"], refs) + refs = [v for v in refs if str(v["열쇠"]).startswith("줄.")] + assert refs and all(not HAN.search(v["기호"]) and v["기호"] == "C" for v in refs) + defs = {(d["기호"], d["아래"]): d for d in eq["정의"]} + for v in refs: + d = defs[(v["기호"], v["아래"])] + assert d["갈래"] == "요소" and not HAN.search(d["기호"]) + assert any("호표 줄 금액" in c for d in defs.values() for c in d["연결"]) + + +def test_M01_전수_정의_한글_기호는_하위_로직_칩뿐(): + whole = m01.loaded()[1] + keys = [r["키"] for d in m01.loaded()[0].values() if d.get("그룹") == "로직" for r in d["줄"]] + for code in keys[::25]: + for d in meq.export(whole, str(code))["정의"]: + assert d["갈래"] == "블록" or not HAN.search(d["기호"]), (code, d["이름"]) + + +def _old(path): + """사본 변수표를 걷어 옛 사본 흉내 → (옛 문서, 걷은 줄 수).""" + doc = json.loads(path.read_bytes()) + cut = 0 + for r in doc[skc.KEY]["로직"]: + cut += r.pop(sym.FIELD, None) is not None + doc[skc.KEY]["판"] = skc._fp(doc[skc.KEY]["로직"]) + path.write_text(json.dumps(doc, ensure_ascii=False), encoding="utf-8") + return doc, cut + + +def test_새_사본은_이미_새_기호_옛_사본은_새로_씀(world, tmp_path): + olds = _make(world["personal"]) + back = tmp_path / "stamp" + mig.migrate(True, back) # 새 사본 찍음 + paths = list(olds) + for p in paths: + rows = json.loads(p.read_bytes())[skc.KEY]["로직"] + assert any(r.get(sym.FIELD) for r in rows) # ② 새 사본 = 변수표 있음 + assert {r["상태"] for r in _mine(sym.run(), olds).values()} == {"채울것없음"} + stripped = {p: _old(p) for p in paths} + assert all(cut for _, cut in stripped.values()) + # 사용자 고침 칸 하나 — 영문 기호 Z 는 그대로 + sk = next(p for p in paths if p.parent.name == "sangeun") + doc = json.loads(sk.read_bytes()) + row = next(r for r in doc[skc.KEY]["로직"] if r.get("입력")) + name = str(row["입력"][0]["이름"]) + row[sym.FIELD] = {name: {"기호": "Z", "아래": "내것"}} + sk.write_text(json.dumps(doc, ensure_ascii=False), encoding="utf-8") + before = {p: p.read_bytes() for p in paths} + rows = _mine(sym.run(), olds) # 보기만 = 안 씀 + assert {r["상태"] for r in rows.values()} == {"같음"} and not any( + r["씀"] for r in rows.values() + ) + assert all(p.read_bytes() == b for p, b in before.items()) + back = tmp_path / "back" + rows = _mine(sym.run(True, back), olds) + assert all(r["씀"] and r["채움"] > 0 and r["못닿음"] == 0 for r in rows.values()) + for p in paths: + for r in json.loads(p.read_bytes())[skc.KEY]["로직"]: + for part in ("입력", "중간"): + for spec in r.get(part) or []: + look = (r.get(sym.FIELD) or {})[str(spec["이름"])] + assert look.get("기호") + if not (r is row and spec["이름"] == name): + assert not HAN.search(look["기호"]), (r["키"], spec["이름"]) + now = next(r for r in json.loads(sk.read_bytes())[skc.KEY]["로직"] if r["키"] == row["키"]) + assert now[sym.FIELD][name] == {"기호": "Z", "아래": "내것"} + assert {r["상태"] for r in _mine(sym.run(), olds).values()} == {"채울것없음"} # 다시 돌림 + mig.restore(back) + assert all(p.read_bytes() == before[p] for p in paths) + + +def test_채운_줄은_M01_줄_변수표_그대로(): + live = m01.loaded()[1] + row = copy.deepcopy(live.logic("GC000211")) + src = row[sym.FIELD] + stripped = {k: v for k, v in row.items() if k != sym.FIELD} + got, done, lost = sym.fill({"로직": [json.loads(json.dumps(stripped, default=str))]}, live) + names = {str(s["이름"]) for k in ("입력", "중간") for s in row[k]} + assert done == len(names & set(src)) and lost == len(names - set(src)) + assert all(got["로직"][0][sym.FIELD][n]["기호"] == src[n]["기호"] for n in names & set(src))