From b2bdc7fa4127b4bb3ff863bb69e1d03a84b1ab20 Mon Sep 17 00:00:00 2001 From: Msystech Date: Fri, 14 Aug 2026 14:32:09 +0900 Subject: [PATCH] =?UTF-8?q?=ED=83=9C=EA=B7=B8=20=EC=84=A0=ED=83=9D=20?= =?UTF-8?q?=E2=80=94=20=EB=AA=A9=EC=97=85=20=EA=B5=AC=EC=A1=B0=EB=A1=9C.?= =?UTF-8?q?=20=EB=8B=A4=EB=A7=8C=20=EC=97=86=EB=8A=94=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=EB=8A=94=20=EB=A7=8C=EB=93=A4=EC=A7=80=20=EC=95=8A=EB=8A=94?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1080x700 3단(분류 / 결과 / 태그 정보), 큰 제목 + 부제, 검색칩, 바닥에 선택 칩과 버튼. 목업의 뼈대를 그대로 가져왔다. 가져오지 않은 것과 그 이유: · 설명 한 줄 — 384건 전부 없다. 원천(bzDataInterface)에도 주석이 0줄이라 사람이 써야 한다. LLM 으로 지어내면 안 된다: 태그가 실제로 무엇을 꺼내는지는 VB 함수 본문의 SQL 을 읽어야 알고, 틀린 설명은 없는 설명보다 나쁘다. · 예시 값 — 값은 런타임에 HIS DB 에서 환자 문맥을 받아 계산된다. '강남성심병원' 같은 더미를 넣으면 사용자가 그것을 실제 반환값으로 믿는다. 실제 조회 가능 여부는 별도 조사 중이다. · 최근 사용 일시 — 저장소가 없다. 만들어도 첫 실행에 384칸이 전부 빈다. · 태그 키 절 — 태그는 이름이 곧 키다. 같은 문자열을 두 번 그리는 대신 우측 큰 이름을 고정폭으로 두고 복사 버튼을 붙였다. · 2단 소분류(기관·문서 > 기본 정보) — 데이터는 1단이다. 억지로 가르면 1개짜리 버킷 25개가 나오고, 손으로 배당하면 새 태그가 자동 분류되지 않는 부채가 남는다. · 상단 가로 칩 필터 줄 — 좌측 분류 트리와 같은 필터를 두 번 그린다. 두 곳이 갈라지면 어느 쪽이 진실인지 알 수 없다. 필터의 단일 출처는 좌측 열이다. · ⌘K 칩 — Windows 앱이고, 창이 열리면 생성자가 이미 검색칸에 포커스를 준다. 바꿔 넣은 것: · '관련 필드' → '변형'. 없는 개념을 흉내내는 대신 지금 데이터로 계산되는 진짜 관계를 쓴다 — 마지막 밑줄 앞이 같은 태그들(PAT_주민번호 → _Dash · _Blind). TagSearch.VariantsOf 신설. 밑줄이 하나뿐이면 그건 접두어 경계라 제외한다(안 그러면 PAT_ 전체가 변형으로 딸려 온다). · '자주 사용' 배지 → '추천'. 그런 임계값은 코드에 없다. 있는 것은 컨트롤 타입별 큐레이션 (LegacyTagUsageCatalog.SuggestFor)뿐이라 '자주 사용'이라 부르면 근거를 왜곡한다. · 사용 횟수에 스냅샷 표기를 붙였다. 숫자만 크게 띄우면 실시간 집계로 읽힌다. · 상단 칩 줄 자리에는 좌측과 겹치지 않는 것 하나만 — '미사용 숨기기'. 384종 중 227종이 미사용이라 값이 크다. 분류와 겹쳐서 걸린다. 창 껍데기는 OS 크롬을 유지했다. 목업의 '오른쪽 위 X + 둥근 카드'는 WindowStyle=None 이 필요한데 이 앱 대화상자 10종이 전부 OS 크롬이라 이 창만 바꾸면 규약이 두 벌이 되고, AllowsTransparency 는 ClearType 이 꺼져 13px 한글이 뭉개져 금지돼 있다. 둥근 모서리와 그림자는 DWM 이 이미 그린다. 게이트: 테스트 267/267, --edit-smoke 0실패, --modal-check 2/2, --maxrect 10/10, --query-popup 17/17, --db-smoke 3000 diff 0·예외 0, --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 동일, --dialog-shots 57파일. Co-Authored-By: Claude Opus 5 --- src/SheetMe.Core/Catalog/TagSearch.cs | 22 ++ .../Views/TagPickerDialogView.xaml | 224 ++++++++++++++---- .../Views/TagPickerDialogView.xaml.cs | 64 ++++- 3 files changed, 268 insertions(+), 42 deletions(-) diff --git a/src/SheetMe.Core/Catalog/TagSearch.cs b/src/SheetMe.Core/Catalog/TagSearch.cs index 5caeaf7..581a6bc 100644 --- a/src/SheetMe.Core/Catalog/TagSearch.cs +++ b/src/SheetMe.Core/Catalog/TagSearch.cs @@ -46,6 +46,28 @@ public static class TagSearch }; } + /// + /// 같은 값을 다른 형식으로 내는 태그들 — PAT_주민번호 → _Dash · _Blind. + /// 목업의 '관련 필드' 자리를 이것으로 채운다. 없는 개념을 흉내내는 대신 + /// 지금 데이터로 계산되는 진짜 관계를 쓴다 — 마지막 밑줄 앞까지가 같으면 한 갈래다. + /// + public static List VariantsOf(string tag, IEnumerable all) + { + var cut = tag.LastIndexOf('_'); + var stem = cut > 0 ? tag[..cut] : tag; + // 밑줄이 하나뿐이면 그건 접두어 경계다(PAT_이름) — 줄기가 'PAT' 이 되어 분류 전체가 변형으로 딸려 온다 + if (stem.Length == 0 || !stem.Contains('_')) + { + return new List(); + } + return all + .Where(t => !string.Equals(t, tag, StringComparison.Ordinal) + && (string.Equals(t, stem, StringComparison.Ordinal) + || t.StartsWith(stem + "_", StringComparison.Ordinal))) + .OrderBy(t => t, StringComparer.Ordinal) + .ToList(); + } + /// /// 분류 안의 소분류 — 두 번째 토큰. PAT_주민번호_Dash → "주민번호". /// 같은 뿌리에서 갈라진 변형(_Dash, _Blind, _Refer)이 흩어지지 않고 붙어 보이게 한다. diff --git a/src/SheetMe.Designer/Views/TagPickerDialogView.xaml b/src/SheetMe.Designer/Views/TagPickerDialogView.xaml index 8e5aea6..50f420a 100644 --- a/src/SheetMe.Designer/Views/TagPickerDialogView.xaml +++ b/src/SheetMe.Designer/Views/TagPickerDialogView.xaml @@ -1,70 +1,145 @@ + - + + + - + - - - - - - - - - - - + + + + + + + + + + + + + + - + + + + + - + - - + + + + + + + + + + + + + + + + + - - -