상병 조합 11종 — 225종 → 236종
전부 기존 상병 조회(Okd 공용 쿼리, Scope All/Main/Sub) 재사용 —
왕복이 늘지 않고 결합·표기만 다르다(bzDataInterface.vb:8825-10481,
Case Else 갈래. SHCTR 무하이픈·BSGH·JEGG 배제·SPHH 본문 분기 미이식):
OCM_상병코드_상병명("코드-명(확진/의증)" 줄단위),
OCM_진단구분_상병코드_상병명("[주진단명] : "/"[의증] : "(공백 5)/
"[부진단명] : "), OCM_진단구분_상병명("[주] /[부] "+명+확의),
OCM_상병명_상병코드(확진 접미가 " - 확증" — 레거시 오타로 보이지만
그대로), OCM_주상병일자(무구분 이어붙임 — 복수 주상병이 한 줄로
붙는 원문 그대로. 등록일시 12자 미만이면 레거시 예외→빈 값 재현),
OCM_상병코드_상병명_주상병("1. " 고정 번호 + PadRight 15),
OCM_상병코드_상병명_부상병(번호가 0부터 시작하는 결함 보존),
OCM_부상병명, OCM_주상병명_영어, OCM_주상병명_주상병코드.
OCM_주상병특정기호는 사유 완결 — 심사 상병 공용 쿼리(Bkd)의 SELECT
목록에 특정기호(OkdVeeCod)가 없어 행이 있으면 컬럼 예외→빈, 없어도
빈. 항상 빈 값인 확정 결함이다.
이름 게이트가 OCM_주상병명_주상병코드를 카탈로그 미등재로 잡았다 —
레거시 원문(:10429) 실존을 확인하고 등재(전수 추출 이후 추가된 함수).
- dotnet test 342/342 · --edit-smoke 실패 0 (이름 검사 236종)
- --db-patient ①~㊱ 전건 통과
- --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 불변
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
8256b79800
commit
02657b3893
@@ -427,6 +427,9 @@ public static class LegacyTagCatalog
|
||||
"OCM_주상병명_Refer",
|
||||
"OCM_주상병명_영어",
|
||||
"OCM_주상병명_영어_Refer",
|
||||
// 카탈로그 전수 추출(2026-07-16) 이후 레거시에 추가된 함수 —
|
||||
// bzDataInterface.vb:10429 실존을 확인하고 등재했다(이름 게이트가 잡았다)
|
||||
"OCM_주상병명_주상병코드",
|
||||
"OCM_주상병일자",
|
||||
"OCM_주상병일자_Refer",
|
||||
"OCM_주상병코드",
|
||||
|
||||
@@ -728,10 +728,23 @@ public sealed class PatientTagResolver : ITagValueResolver
|
||||
{
|
||||
"OCM_상병명_가로" or "OCM_상병명_세로" or "OCM_상병명_영어_가로" or "OCM_상병명_영어_세로"
|
||||
or "OCM_상병코드_가로" or "OCM_상병코드_세로" => DiagnosisStore.Scope.All,
|
||||
"OCM_상병코드_상병명" or "OCM_진단구분_상병코드_상병명" or "OCM_진단구분_상병명"
|
||||
or "OCM_상병명_상병코드" => DiagnosisStore.Scope.All,
|
||||
"OCM_부상병코드" or "OCM_부상병POA" => DiagnosisStore.Scope.Sub,
|
||||
"OCM_상병코드_상병명_부상병" or "OCM_부상병명" => DiagnosisStore.Scope.Sub,
|
||||
"OCM_주상병명" or "OCM_주상병코드" or "OCM_주상병POA" => DiagnosisStore.Scope.Main,
|
||||
"OCM_주상병일자" or "OCM_상병코드_상병명_주상병" or "OCM_주상병명_영어"
|
||||
or "OCM_주상병명_주상병코드" => DiagnosisStore.Scope.Main,
|
||||
_ => (DiagnosisStore.Scope?)null,
|
||||
} is { } s ? s : (DiagnosisStore.Scope?)null;
|
||||
// 심사 상병(B_OkdInf)에서 특정기호(OkdVeeCod)를 뽑는 태그인데, 그 공용 쿼리
|
||||
// (Bkd_상병쿼리, bzDataInterface.vb:14625-14811)의 SELECT 목록엔 OkdVeeCod 가
|
||||
// 없다 — 행이 있으면 컬럼 없음 예외→"" , 없어도 "" . 항상 빈 값인 확정 결함이다.
|
||||
if (tag == "OCM_주상병특정기호")
|
||||
{
|
||||
return new TagValue(false,
|
||||
"레거시 결함(특정기호 컬럼이 SELECT 에 없음)으로 항상 빈 값인 태그입니다");
|
||||
}
|
||||
if (scope is null)
|
||||
{
|
||||
return null;
|
||||
@@ -785,6 +798,33 @@ public sealed class PatientTagResolver : ITagValueResolver
|
||||
"OCM_부상병POA" => string.Join(Environment.NewLine, rows.Select(r => Cell(r, "OkdPoaTyp"))),
|
||||
"OCM_주상병명" => Cell(rows[0], "KcdKorNam"),
|
||||
"OCM_주상병코드" => Cell(rows[0], "KcdElcCod"),
|
||||
// ── 조합 표기 9종(:8825-10481, 전부 Case Else 갈래) ──
|
||||
// SHCTR(J 서식 무하이픈)·BSGH·JEGG(배제 표기)·SPHH 본문 분기는 미이식.
|
||||
// 원문의 결함 표기를 그대로 보존한다 — 주상병 목록의 "1. " 고정 번호,
|
||||
// 부상병의 0부터 시작하는 번호, 상병명_상병코드의 " - 확증"(확진의 오타로 보임),
|
||||
// 주상병 계열의 무구분 이어붙이기(복수 주상병이 한 줄로 붙는다).
|
||||
"OCM_상병코드_상병명" => string.Concat(rows.Select(r =>
|
||||
$"{Cell(r, "KcdElcCod")}-{Cell(r, "KcdKorNam")}{Suffix(r)}\r\n")),
|
||||
"OCM_진단구분_상병코드_상병명" => string.Concat(rows.Select(r =>
|
||||
(Cell(r, "OkdDspSeq") == "1" ? "[주진단명] : "
|
||||
: Cell(r, "OkdCfmSus") == "의" ? "[의증] : " : "[부진단명] : ")
|
||||
+ $"{Cell(r, "KcdElcCod")}-{Cell(r, "KcdKorNam")}\r\n")),
|
||||
"OCM_진단구분_상병명" => string.Concat(rows.Select(r =>
|
||||
$"{(Cell(r, "OkdDspSeq") == "1" ? "[주] " : "[부] ")}{Cell(r, "KcdKorNam")}{Suffix(r)}\r\n")),
|
||||
"OCM_상병명_상병코드" => string.Concat(rows.Select(r =>
|
||||
$"{Cell(r, "KcdKorNam")}{Cell(r, "OkdCfmSus") switch { "확" => " - 확증", "의" => " - 의증", _ => "" }}"
|
||||
+ $"-{Cell(r, "KcdElcCod")}\r\n")),
|
||||
"OCM_주상병일자" => rows.Any(r => Cell(r, "OkdEntDtf").Length < 12)
|
||||
? string.Empty // 레거시는 12자 미만이면 예외→빈 값이었다
|
||||
: string.Concat(rows.Select(r => Stamp(Cell(r, "OkdEntDtf")))),
|
||||
"OCM_상병코드_상병명_주상병" => string.Concat(rows.Select(r =>
|
||||
$"1. {Cell(r, "KcdElcCod")}".PadRight(15) + $" - {Cell(r, "KcdKorNam")}")),
|
||||
"OCM_상병코드_상병명_부상병" => string.Concat(rows.Select((r, i) =>
|
||||
$"{i}. {Cell(r, "KcdElcCod")}".PadRight(15) + $" - {Cell(r, "KcdKorNam")}\r\n")),
|
||||
"OCM_부상병명" => string.Concat(rows.Select(r => $"{Cell(r, "KcdKorNam")}\r\n")),
|
||||
"OCM_주상병명_영어" => Cell(rows[0], "KcdEngNam"),
|
||||
"OCM_주상병명_주상병코드" => string.Concat(rows.Select(r =>
|
||||
$"{Cell(r, "KcdKorNam")} - {Cell(r, "KcdElcCod")}")),
|
||||
_ => Cell(rows[0], "OkdPoaTyp"),
|
||||
};
|
||||
return value.Trim().Length > 0
|
||||
@@ -2468,6 +2508,10 @@ public sealed class PatientTagResolver : ITagValueResolver
|
||||
"OCM_상병명_가로", "OCM_상병명_세로", "OCM_상병명_영어_가로", "OCM_상병명_영어_세로",
|
||||
"OCM_상병코드_가로", "OCM_상병코드_세로", "OCM_부상병코드", "OCM_부상병POA",
|
||||
"OCM_주상병명", "OCM_주상병코드", "OCM_주상병POA",
|
||||
"OCM_상병코드_상병명", "OCM_진단구분_상병코드_상병명", "OCM_진단구분_상병명",
|
||||
"OCM_상병명_상병코드", "OCM_주상병일자", "OCM_상병코드_상병명_주상병",
|
||||
"OCM_상병코드_상병명_부상병", "OCM_부상병명", "OCM_주상병명_영어",
|
||||
"OCM_주상병특정기호", "OCM_주상병명_주상병코드",
|
||||
"OCM_OPNAME", "OCM_OPRCODNAM", "OCM_DX", "OCM_수술상병", "OCM_수술부위",
|
||||
"OCM_수술_OprPatETC", "OCM_수술집도의", "OCM_수술마취의사",
|
||||
"OCM_심사_주상병명", "OCM_심사_주상병코드", "OCM_심사_부상병명", "OCM_심사_부상병코드",
|
||||
|
||||
Reference in New Issue
Block a user