diff --git a/B05_Profile/B05_Profile_Structure_Types.json b/B05_Profile/B05_Profile_Structure_Types.json index 1788819a..b91b0ad8 100644 --- a/B05_Profile/B05_Profile_Structure_Types.json +++ b/B05_Profile/B05_Profile_Structure_Types.json @@ -467,7 +467,8 @@ "choices": ["콘크리트 개거 150×200", "L형수로 H=0.2"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 실무 붙박이(콘크리트 개거)로 돎" } ] }, @@ -729,7 +730,8 @@ "label": "설치 측", "input": "select", "choices": ["자동(성토 쪽)", "좌", "우"], - "default": "자동(성토 쪽)" + "default": "자동(성토 쪽)", + "default_basis": "「자동(성토 쪽)」 — 칸이 생기기 전의 동작을 이어받는 표식" }, { "key": "weep_hole_diameter_mm", @@ -738,7 +740,8 @@ "unit": "㎜", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 Ø50 으로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" }, { "key": "weep_hole_area_m2", @@ -747,7 +750,8 @@ "unit": "㎡", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 2㎡당 1개로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" } ] }, @@ -832,7 +836,8 @@ "choices": ["품셈", "실무 관행"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 열로 돎 — 실무 관행 열은 골라야 씀" }, { "key": "fill_concrete_mpa", @@ -841,7 +846,8 @@ "choices": ["180", "210"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 계산 쪽 기준 강도로 돎" }, { "key": "face_slope_ratio", @@ -849,7 +855,8 @@ "input": "number", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 표준경사로 자동 판정 — 값을 넣으면 그 값이 이김" }, { "key": "foundation", @@ -865,7 +872,8 @@ "label": "설치 측", "input": "select", "choices": ["자동(성토 쪽)", "좌", "우"], - "default": "자동(성토 쪽)" + "default": "자동(성토 쪽)", + "default_basis": "「자동(성토 쪽)」 — 칸이 생기기 전의 동작을 이어받는 표식" }, { "key": "weep_hole_diameter_mm", @@ -874,7 +882,8 @@ "unit": "㎜", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 Ø50 으로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" }, { "key": "weep_hole_area_m2", @@ -883,7 +892,8 @@ "unit": "㎡", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 2㎡당 1개로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" } ] }, @@ -968,7 +978,8 @@ "choices": ["품셈", "실무 관행"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 열로 돎 — 실무 관행 열은 골라야 씀" }, { "key": "fill_concrete_mpa", @@ -977,7 +988,8 @@ "choices": ["180", "210"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 계산 쪽 기준 강도로 돎" }, { "key": "face_slope_ratio", @@ -985,7 +997,8 @@ "input": "number", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 표준경사로 자동 판정 — 값을 넣으면 그 값이 이김" }, { "key": "foundation", @@ -1001,7 +1014,8 @@ "label": "설치 측", "input": "select", "choices": ["자동(성토 쪽)", "좌", "우"], - "default": "자동(성토 쪽)" + "default": "자동(성토 쪽)", + "default_basis": "「자동(성토 쪽)」 — 칸이 생기기 전의 동작을 이어받는 표식" }, { "key": "weep_hole_diameter_mm", @@ -1010,7 +1024,8 @@ "unit": "㎜", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 Ø50 으로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" }, { "key": "weep_hole_area_m2", @@ -1019,7 +1034,8 @@ "unit": "㎡", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 2㎡당 1개로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" } ] }, @@ -1093,7 +1109,8 @@ "label": "설치 측", "input": "select", "choices": ["자동(성토 쪽)", "좌", "우"], - "default": "자동(성토 쪽)" + "default": "자동(성토 쪽)", + "default_basis": "「자동(성토 쪽)」 — 칸이 생기기 전의 동작을 이어받는 표식" }, { "key": "tiers", @@ -1102,7 +1119,8 @@ "unit": "단", "default": 1, "required": false, - "phase": "b05" + "phase": "b05", + "default_basis": "1 = 다단 없음 — 도메인 수치가 아니라 「단이 하나」라는 표식(기슭막이와 같은 벌)" }, { "key": "lift_m", @@ -1111,7 +1129,8 @@ "unit": "m", "default": 0, "required": false, - "phase": "b05" + "phase": "b05", + "default_basis": "0 = 자동 자리 그대로 — 올리지 않음을 뜻함(기슭막이와 같은 벌)" }, { "key": "shift_m", @@ -1120,7 +1139,8 @@ "unit": "m", "default": 0, "required": false, - "phase": "b05" + "phase": "b05", + "default_basis": "0 = 자동 자리 그대로 — 옮기지 않음을 뜻함(기슭막이와 같은 벌)" }, { "key": "back_len_cm", @@ -1129,7 +1149,8 @@ "choices": ["25", "30", "35", "45", "55", "60", "75"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 돌쌓기 기본값으로 서고 「기본값으로 섰음」이 줄로 뜸 — 돌이 아닌 형태도 있어 필수로 못 검" }, { "key": "stone_kind", @@ -1138,7 +1159,8 @@ "choices": ["야면석·호박돌", "깬잡석", "깬돌", "견치돌"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 야면석 계수 열로 서고 그 사실이 줄로 뜸 — 돌이 아닌 형태도 있어 필수로 못 검" }, { "key": "stone_supply", @@ -1147,7 +1169,8 @@ "choices": ["채집", "구입"], "default": "채집", "required": false, - "phase": "detail" + "phase": "detail", + "default_basis": "「채집」 — 별표2 「야면석 등은 가급적 현장에서 채취·사용」 권고. 구조물마다 바꿀 수 있음" }, { "key": "stone_coeff_basis", @@ -1156,7 +1179,8 @@ "choices": ["품셈", "실무 관행"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 열로 돎 — 실무 관행 열은 골라야 씀" }, { "key": "fill_concrete_mpa", @@ -1165,7 +1189,8 @@ "choices": ["180", "210"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 계산 쪽 기준 강도로 돎" }, { "key": "face_slope_ratio", @@ -1173,7 +1198,8 @@ "input": "number", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 표준경사로 자동 판정 — 값을 넣으면 그 값이 이김" }, { "key": "foundation", @@ -1191,7 +1217,8 @@ "unit": "㎜", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 Ø50 으로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" }, { "key": "weep_hole_area_m2", @@ -1200,7 +1227,8 @@ "unit": "㎡", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 2㎡당 1개로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" } ] }, @@ -1285,7 +1313,8 @@ "choices": ["품셈", "실무 관행"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 열로 돎 — 실무 관행 열은 골라야 씀" }, { "key": "fill_concrete_mpa", @@ -1294,7 +1323,8 @@ "choices": ["180", "210"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 계산 쪽 기준 강도로 돎" }, { "key": "face_slope_ratio", @@ -1302,7 +1332,8 @@ "input": "number", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 표준경사로 자동 판정 — 값을 넣으면 그 값이 이김" }, { "key": "foundation", @@ -1318,7 +1349,8 @@ "label": "설치 측", "input": "select", "choices": ["자동(성토 쪽)", "좌", "우"], - "default": "자동(성토 쪽)" + "default": "자동(성토 쪽)", + "default_basis": "「자동(성토 쪽)」 — 칸이 생기기 전의 동작을 이어받는 표식" }, { "key": "weep_hole_diameter_mm", @@ -1327,7 +1359,8 @@ "unit": "㎜", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 Ø50 으로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" }, { "key": "weep_hole_area_m2", @@ -1336,7 +1369,8 @@ "unit": "㎡", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 2㎡당 1개로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" } ] }, @@ -1470,7 +1504,8 @@ "choices": ["품셈", "실무 관행"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 열로 돎 — 실무 관행 열은 골라야 씀" }, { "key": "fill_concrete_mpa", @@ -1479,7 +1514,8 @@ "choices": ["180", "210"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 계산 쪽 기준 강도로 돎" }, { "key": "face_slope_ratio", @@ -1487,7 +1523,8 @@ "input": "number", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 표준경사로 자동 판정 — 값을 넣으면 그 값이 이김" }, { "key": "foundation", @@ -1537,7 +1574,8 @@ "unit": "㎜", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 Ø50 으로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" }, { "key": "weep_hole_area_m2", @@ -1546,7 +1584,8 @@ "unit": "㎡", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 2㎡당 1개로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" } ] }, @@ -1586,7 +1625,8 @@ "choices": ["품셈", "실무 관행"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 열로 돎 — 실무 관행 열은 골라야 씀" }, { "key": "fill_concrete_mpa", @@ -1595,7 +1635,8 @@ "choices": ["180", "210"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 계산 쪽 기준 강도로 돎" }, { "key": "face_slope_ratio", @@ -1603,7 +1644,8 @@ "input": "number", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 표준경사로 자동 판정 — 값을 넣으면 그 값이 이김" }, { "key": "foundation", @@ -1675,7 +1717,8 @@ "choices": ["양쪽", "좌", "우"], "default": "양쪽", "required": false, - "phase": "b05" + "phase": "b05", + "default_basis": "「좌」는 셀렉트 첫 항목일 뿐 도메인 확정값이 아님 — 측점마다 사용자가 고름" }, { "key": "tiers", @@ -1684,7 +1727,8 @@ "unit": "단", "default": 1, "required": false, - "phase": "b05" + "phase": "b05", + "default_basis": "1 = 다단 없음 — 도메인 수치가 아니라 「단이 하나」라는 표식" }, { "key": "lift_m", @@ -1693,7 +1737,8 @@ "unit": "m", "default": 0, "required": false, - "phase": "b05" + "phase": "b05", + "default_basis": "0 = 자동 자리 그대로" }, { "key": "shift_m", @@ -1702,7 +1747,8 @@ "unit": "m", "default": 0, "required": false, - "phase": "b05" + "phase": "b05", + "default_basis": "0 = 자동 자리 그대로" }, { "key": "form", @@ -1720,7 +1766,8 @@ "choices": ["25", "30", "35", "45", "55", "60", "75"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 돌쌓기 기본값으로 서고 「기본값으로 섰음」이 줄로 뜸 — 돌이 아닌 형태도 있어 필수로 못 검" }, { "key": "stone_kind", @@ -1729,7 +1776,8 @@ "choices": ["야면석·호박돌", "깬잡석", "깬돌", "견치돌"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 야면석 계수 열로 서고 그 사실이 줄로 뜸 — 돌이 아닌 형태도 있어 필수로 못 검" }, { "key": "stone_supply", @@ -1747,7 +1795,8 @@ "choices": ["품셈", "실무 관행"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 열로 돎 — 실무 관행 열은 골라야 씀" }, { "key": "fill_concrete_mpa", @@ -1756,7 +1805,8 @@ "choices": ["180", "210"], "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 계산 쪽 기준 강도로 돎" }, { "key": "face_slope_ratio", @@ -1764,7 +1814,8 @@ "input": "number", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 품셈 표준경사로 자동 판정 — 값을 넣으면 그 값이 이김" }, { "key": "foundation", @@ -1818,7 +1869,8 @@ "unit": "㎜", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 Ø50 으로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" }, { "key": "weep_hole_area_m2", @@ -1827,7 +1879,8 @@ "unit": "㎡", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 국가기준 2㎡당 1개로 돎 — 사용자 확정 「국가기준 + 숫자 변경 가능하게」" } ] }, @@ -2005,7 +2058,8 @@ "choices": ["자동(성토 쪽)", "좌", "우"], "default": "자동(성토 쪽)", "required": false, - "phase": "b05" + "phase": "b05", + "default_basis": "「자동(성토 쪽)」 — 흙은 성토 쪽에 쌓는다는 지금까지의 동작을 이어받는 표식. 측점마다 좌·우로 바꿈" }, { "key": "fill_slope_ratio", @@ -2013,7 +2067,8 @@ "input": "number", "default": null, "required": false, - "phase": "detail" + "phase": "detail", + "empty_means": "비우면 그 측점의 노선 성토 기울기를 그대로 씀 — 지식DB 가 「기본 비탈기울기는 근거에 없다」고 못 박은 자리" }, { "key": "extra_distance_m", @@ -2022,7 +2077,8 @@ "unit": "m", "default": 0, "required": false, - "phase": "detail" + "phase": "detail", + "default_basis": "0 = 「추가 없음」 — 노선 안 사토장은 측점 누가거리로 거리가 나오므로 이 칸은 외부 사토장 대비 여벌" }, { "key": "area_m2", diff --git a/B05_Profile/B05_Profile_Structures_Schema.py b/B05_Profile/B05_Profile_Structures_Schema.py index d570578e..c484602f 100644 --- a/B05_Profile/B05_Profile_Structures_Schema.py +++ b/B05_Profile/B05_Profile_Structures_Schema.py @@ -48,6 +48,18 @@ class StructureOptionField(BaseModel): # 기본값이 그대로 저장된다(2026-09-07 사용자: 「폼 선택은 가능하게 반영하고 나중에 # 선택 비활성화로 하자」). 칸 자체를 없애면 나중에 켤 자리를 다시 찾아야 한다. enabled: bool = True + # ── 「기본값도 필수도 아닌」 세 번째 갈래 (2026-09-09 신설) ──────────────────── + # 지금까지 칸은 둘 중 하나여야 했다 — **기본값이 있거나, 필수이거나**. 그러지 않으면 + # 빈 값이 조용히 저장되기 때문이다. 그런데 실제로는 셋째가 있다: + # **「비워 두는 것이 뜻인 칸」** — 비면 계산 쪽이 **기준값**으로 돌고 그 사실이 화면에 + # 사유로 뜬다. 값을 넣으면 그 값이 이긴다(예: 전면 기울기, 물빼기 구멍, 뒷길이). + # 여기에 기준의 출처를 **한 줄로 적어** 두면, 그 칸이 왜 비어 있어도 되는지가 + # **정본 파일 안에** 남는다. 시험 예외 목록(창마다 따로 사는 파일)로 두면 창이 갈릴 때 + # 같은 시험이 다른 창에서 깨진다 — 실제로 그렇게 깨졌다(2026-09-09). + empty_means: str | None = None + # 기본값이 **도메인 확정값이 아닐 때** 그 뜻을 적는다(예: 「다단 없음」·「안 더함」). + # 법정·확정 수치면 비워 둔다 — 비어 있는 것이 「확정값」이라는 뜻이다. + default_basis: str | None = None class StructureType(BaseModel):