feat(M01): 일위대가 조합에 칸 「본뜬키」 더함 · 목록 · 상세에 보임 (계약 더함)
- 열 한 벌에 「본뜬키」(소유 다음 · 비고 앞) — 비면 원본 · 있으면 본뜬 원본 조합 키 - 서버가 없는 키 · 자기 키를 400 으로 막고 검사(check_master)도 같은 규칙 - 정본 조합 37 줄에 본뜬키 null 채움 · 목록 「본뜬키」 열 · 상세 「원본 / 본뜬키」 줄 - _틀.md 10장 · _화면_계약.md 9장 갱신 · 시험 하나 더함 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RoyUwuTFiDJfvCfHpvKKzp
This commit is contained in:
@@ -226,6 +226,7 @@ def check_combo_form(name: str, data: dict) -> list[str]:
|
||||
if not isinstance(rows_, list):
|
||||
return out + [f"{name} · 머리 「줄」 목록 없음"]
|
||||
seen_names: dict[str, str] = {}
|
||||
own = {str(r.get("키")) for r in rows_}
|
||||
for row in rows_:
|
||||
key = str(row.get("키"))
|
||||
where = f"{name} · {key} {row.get('이름') or ''}".strip()
|
||||
@@ -249,6 +250,9 @@ def check_combo_form(name: str, data: dict) -> list[str]:
|
||||
out.append(f"{where} · 소유 「{row.get('소유')}」 — {' · '.join(mcb.OWNERS)} 아님")
|
||||
if not _source_ok(row.get("출처")):
|
||||
out.append(f"{where} · 출처 모양 「{row.get('출처')}」")
|
||||
origin = row.get("본뜬키")
|
||||
if origin is not None and (origin == key or origin not in own):
|
||||
out.append(f"{where} · 본뜬키 「{origin}」 — 비었거나 이 파일의 다른 조합 키여야 함")
|
||||
return out
|
||||
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ TID = "UA"
|
||||
OWNERS = ("현장", "공용")
|
||||
MAX_이름 = 60 # 조합 이름 최대 글자 수 — 관리자가 짓는 짧은 이름이라 이보다 길면 저장 막음
|
||||
# 줄 열 한 벌 — 차례까지 이대로(`_틀.md` 10장)
|
||||
COLS = ("키", "이름", "구분", "상세구분", "단위", "담은로직", "출처", "소유", "비고")
|
||||
COLS = ("키", "이름", "구분", "상세구분", "단위", "담은로직", "출처", "소유", "본뜬키", "비고")
|
||||
ITEM_COLS = ("로직", "메모")
|
||||
|
||||
|
||||
|
||||
@@ -183,6 +183,7 @@ ROW_ORDER = {
|
||||
"담은로직",
|
||||
"출처",
|
||||
"소유",
|
||||
"본뜬키",
|
||||
"비고",
|
||||
),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user