Merge remote-tracking branch 'origin/sub_laptop_1' into main_laptop_1
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# 첫 조합으로 열면 「맞는 줄 0개」 인 로직 (2026-09-21)
|
||||
|
||||
첫 조합 = 화면이 처음 보이는 값 — 입력의 「고르기」 첫 값 · 「범위」 위끝 · 빈 칸은 수 1.
|
||||
로직의 「시험입력」 칸은 일괄 시험 계산만 씀 — 화면은 안 읽음.
|
||||
|
||||
로직 1,354개를 첫 조합으로 돌린 결과 표 찾기가 0 줄인 것 **53 → 51**(둘 고침).
|
||||
|
||||
## 고친 것 — 고르기 첫 값이 원문에 없는 조합 (2줄)
|
||||
|
||||
| 로직 | 첫 조합(옛) | 표 | 고침 |
|
||||
|---|---|---|---|
|
||||
| `GF000219` 13-4-1 돌쌓기 메쌓기(인력) | 뒷길이 25 · 견치돌 · 골쌓기 | QF000421 | 「돌」 고르기 차례를 바꿔 첫 값 = 깬잡석 (25 · 깬잡석 · 골쌓기 = 원문 첫 줄) |
|
||||
| `GF000223` 13-5-1 돌붙임(인력) | 뒷길이 25 · 메붙임 · 깬돌 | QF000432 | 같음 — 첫 값 = 깬잡석 (25 · 깬잡석 = 원문에 있음) |
|
||||
|
||||
- 원문 표는 뒷길이 25 에 깬잡석 · 호박돌만 둠(견치돌은 35 부터 · 깬돌은 30 부터) — 값은 하나도 안 고치고 **고르기 차례만** 바꿈.
|
||||
- 시험입력 칸이 아니라 고르기 차례를 고른 까닭: 화면은 시험입력을 안 읽어 고쳐도 첫 화면이 그대로 멈춤.
|
||||
- `GF000223` 은 조합을 고친 뒤에도 「MP000065 틈메우기돌 값 없음」 에서 멈춤 — 재료 채우기 몫(`ref/_없는_재료.md`).
|
||||
|
||||
## 남은 51줄 — 빈 칸(수)이 1 로 채워져 0 줄
|
||||
|
||||
고르기가 아니라 **설계자가 넣을 수**(규격 ㎜ · 직경 · 연장 따위)가 비어 1 이 들어간 탓.
|
||||
화면에서 사용자가 실제 값을 넣으면 풀림 — 데이터 흠이 아님.
|
||||
|
||||
| 파일 | 줄 | 걸린 조건(보기) |
|
||||
|---|---|---|
|
||||
| 건설품셈 01장 배관공사 | 18 | `규격(㎜)=1` · `관규격(㎜)=1` |
|
||||
| 건설품셈 04장 펌프·공기설비 | 7 | `규격(㎾이하)=1` |
|
||||
| 건설품셈 05장 밸브설비 | 6 | `규격(㎜)=1` |
|
||||
| 건설품셈 06장 측정기기 | 5 | `규격(mm)=1` |
|
||||
| 산림품셈 13장 구조물(큰돌) | 5 | `직경=1` |
|
||||
| 건설품셈 05장 기초공사 | 4 | `혼합층연장=1` 이 「토질=혼합층」 을 켬 |
|
||||
| 건설품셈 03장 보온공사 | 3 | `배관규격(mm)=1` |
|
||||
| 건설품셈 02장 덕트공사 | 2 | `규격(mm)=1` |
|
||||
| 산림품셈 07장 집재·운재 | 1 | `최대집재거리=1` · `집재재적=1` |
|
||||
|
||||
건설품셈 05장 기초공사 4줄(`GC000176` · `GC000189` · `GC000191` · `GC000195`)은 수를 넣어도 비트·말뚝직경 조합이 원문에 없는 자리가 있음 — 그 목록은 각 로직 비고의 「원문에 없는 조합」.
|
||||
|
||||
## 다음
|
||||
|
||||
1. 빈 칸 51줄은 화면에서 「값을 넣어야 계산됨」 안내로 풀림(화면 몫 — 이 창 밖).
|
||||
2. 고르기 조합이 아예 없는 자리는 로직 비고의 「원문에 없는 조합」 이 이미 적음 — 화면에 그 안내를 띄우는 것이 다음 걸음.
|
||||
3. 되풀이 검사: `resources/tester/test_masterdata_check.py::test_첫_고르기_조합은_원문에_있는_줄`.
|
||||
@@ -288,11 +288,11 @@
|
||||
"결과단위": "원/㎡",
|
||||
"출처": "산림품셈 13-4-1",
|
||||
"소유": "공용",
|
||||
"비고": "「원문에 없는 조합: 뒷길이=25 · 돌=견치돌 · 쌓기=골쌓기 / 뒷길이=25 · 돌=견치돌 · 쌓기=켜쌓기 / 뒷길이=25 · 돌=깬돌 · 쌓기=골쌓기 / 뒷길이=25 · 돌=깬돌 · 쌓기=켜쌓기 / 뒷길이=30 · 돌=견치돌 · 쌓기=골쌓기 외 5」",
|
||||
"비고": "고르기 첫 값 = 원문에 있는 조합(뒷길이 25 · 깬잡석 · 골쌓기) · 「원문에 없는 조합: 뒷길이=25 · 돌=견치돌 · 쌓기=골쌓기 / 뒷길이=25 · 돌=견치돌 · 쌓기=켜쌓기 / 뒷길이=25 · 돌=깬돌 · 쌓기=골쌓기 / 뒷길이=25 · 돌=깬돌 · 쌓기=켜쌓기 / 뒷길이=30 · 돌=견치돌 · 쌓기=골쌓기 외 5」",
|
||||
"시험입력": {"높이": 4.0, "돌": "깬잡석"},
|
||||
"입력": [
|
||||
{ "이름": "뒷길이", "설명": "쌓을 돌의 뒤쪽 길이", "단위": "㎝", "고르기": [25, 30, 35, 45, 55, 60, 75] },
|
||||
{ "이름": "돌", "설명": "쌓을 돌 종류", "고르기": ["견치돌", "깬돌", "깬잡석", "호박돌 및 야면석"] },
|
||||
{ "이름": "돌", "설명": "쌓을 돌 종류", "고르기": ["깬잡석", "견치돌", "깬돌", "호박돌 및 야면석"] },
|
||||
{ "이름": "쌓기", "설명": "돌을 어긋나게 쌓는지 줄 맞춰 쌓는지", "고르기": ["골쌓기", "켜쌓기"] },
|
||||
{ "이름": "높이", "설명": "쌓는 벽 높이", "단위": "m" },
|
||||
{ "이름": "초과증가율", "설명": "기준 높이를 넘어 더 드는 품 비율", "단위": "%", "범위": [80, 100] }
|
||||
@@ -677,7 +677,7 @@
|
||||
"결과단위": "원/㎡",
|
||||
"출처": "산림품셈 13-5-1",
|
||||
"소유": "공용",
|
||||
"비고": "해석: 채움 콘크리트 = 레디믹스트콘크리트 · 해석: 돌 이름을 채움·고임돌 표 종별로 맞춤(조약돌·호박돌 및 야면석 → 야면석 · 채움은 호박돌) · 줄눈 모르타르는 원문대로 메붙임에도 얹음 · 뒷길이 70 은 찾기 실패 — 원문 표에 70 없음 · 「원문에 없는 조합: 뒷길이=25 · 붙임=메붙임 · 돌=깬돌 / 뒷길이=25 · 붙임=메붙임 · 돌=호박돌 및 야면석 / 뒷길이=25 · 붙임=찰붙임 · 돌=깬돌 / 뒷길이=25 · 붙임=찰붙임 · 돌=조약돌 및 야면석 / 뒷길이=30 · 붙임=메붙임 · 돌=호박돌 및 야면석 외 17」",
|
||||
"비고": "고르기 첫 값 = 원문에 있는 조합(뒷길이 25 · 메붙임 · 깬잡석) · 해석: 채움 콘크리트 = 레디믹스트콘크리트 · 해석: 돌 이름을 채움·고임돌 표 종별로 맞춤(조약돌·호박돌 및 야면석 → 야면석 · 채움은 호박돌) · 줄눈 모르타르는 원문대로 메붙임에도 얹음 · 뒷길이 70 은 찾기 실패 — 원문 표에 70 없음 · 「원문에 없는 조합: 뒷길이=25 · 붙임=메붙임 · 돌=깬돌 / 뒷길이=25 · 붙임=메붙임 · 돌=호박돌 및 야면석 / 뒷길이=25 · 붙임=찰붙임 · 돌=깬돌 / 뒷길이=25 · 붙임=찰붙임 · 돌=조약돌 및 야면석 / 뒷길이=30 · 붙임=메붙임 · 돌=호박돌 및 야면석 외 17」",
|
||||
"시험입력": {"뒷길이": 30, "붙임": "메붙임", "돌": "깬돌", "굵은골재최대치수": 25, "강도": 18, "슬럼프": "080"},
|
||||
"입력": [
|
||||
{
|
||||
@@ -746,8 +746,8 @@
|
||||
{
|
||||
"이름": "돌",
|
||||
"고르기": [
|
||||
"깬돌",
|
||||
"깬잡석",
|
||||
"깬돌",
|
||||
"조약돌 및 야면석",
|
||||
"호박돌 및 야면석"
|
||||
]
|
||||
|
||||
@@ -472,6 +472,27 @@ def test_범위_입력은_막음(whole):
|
||||
)
|
||||
|
||||
|
||||
def test_첫_고르기_조합은_원문에_있는_줄(whole):
|
||||
"""화면은 고르기 첫 값으로 열림 — 그 조합이 표에 있어야 함(13장 돌쌓기·돌붙임)."""
|
||||
rows = {
|
||||
str(row["키"]): row
|
||||
for data in cm.load(["로직_산림품셈_13장_구조물.json"]).values()
|
||||
for row in data["줄"]
|
||||
}
|
||||
for key in ("GF000219", "GF000223"): # 13-4-1 메쌓기 · 13-5-1 돌붙임
|
||||
row = rows[key]
|
||||
given = {
|
||||
spec["이름"]: spec["고르기"][0]
|
||||
if spec.get("고르기")
|
||||
else (spec["범위"][1] if spec.get("범위") else Decimal(1))
|
||||
for spec in row["입력"]
|
||||
}
|
||||
try:
|
||||
mf.run(whole, key, given)
|
||||
except mf.FormulaError as err: # 다른 막힘(재료 값 없음)은 여기 몫이 아님
|
||||
assert "맞는 줄 0개" not in str(err), f"{key} · {err}"
|
||||
|
||||
|
||||
def test_견본_파일_검사_통과(whole):
|
||||
files = cm.load(SAMPLES)
|
||||
assert len(files) == len(SAMPLES)
|
||||
|
||||
Reference in New Issue
Block a user